能力值:
( LV2,RANK:10 )
2 楼
for(int i = 10000; i <= 99999; ++i) {
printf("%d\n", i);
}
能力值:
( LV2,RANK:10 )
3 楼
[QUOTE=Analytics;899707]
for(int i = 10000; i <= 99999; ++i) {
printf("%d\n", i);
}
[/QUOTE]
哈哈,跟我想的一样
能力值:
( LV2,RANK:10 )
4 楼
不是 我没有说清楚
是随意给你五个数 ,让你生成所有的可能组成的数
能力值:
( LV15,RANK:670 )
5 楼
嵌套循环。穷举
能力值:
( LV2,RANK:10 )
6 楼
kankanaknakana
能力值:
( LV2,RANK:10 )
7 楼
5! 字数不够+++
能力值:
( LV2,RANK:10 )
8 楼
5楼的 说的简单 动手做做试试啊
能力值:
( LV4,RANK:50 )
9 楼
1.给的这五个数 是不是 都是 0~9 之间的?
2.当结果 中 有重复的数时 是都输出 还是 过滤掉 重复的数?
能力值:
( LV2,RANK:10 )
10 楼
楼上的
给出的数范围0到9
给出的数在一个五位数中只能用一次
比如 1 2 3 4 5 不可以组成12234
但是 1 2 3 3 4 其中 3可以用两次
唉 细想想好复杂啊 脑袋要爆炸啦
能力值:
( LV4,RANK:50 )
11 楼
#include "stdio.h"
void main()
{
int a[5]={0},i,j,k,m,n;
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
if(a[i]>9||a[i]<0)
{
printf("Wrong number %d,Input again\n",a[i]);
--i;
}
}
int sum=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(j==i) continue;
for(k=0;k<5;k++)
{
if(k==j||k==i) continue;
for(m=0;m<5;m++)
{
if(m==k||m==j||m==i) continue;
for(n=0;n<5;n++)
{
if(n==m||n==k||n==j||n==i) continue;
printf("%d\n",a[i]+10*a[j]+100*a[k]+1000*a[m]+10000*a[n]);
sum++;
}
}
}
}
printf("\nSUM==%d\n(不负责处理结果中重复的数)\n",sum);
}
能力值:
( LV2,RANK:10 )
12 楼
#include "stdio.h"
int main()
{
char str[20];
while (scanf("%s", str) != EOF)
{
for (int i=0; i<5; i++)
{
char buf[20] = {0};
buf[0] = str[i];
for (int j=0; j<5; j++)
{
buf[1] = str[j];
if (buf[0] != buf[1])
{
for (int m=0; m<5; m++)
{
buf[2] = str[m];
if (buf[2] != buf[1] && buf[2] != buf[0])
{
for (int n=0; n<5; n++)
{
buf[3] = str[n];
if (buf[3] != buf[2] && buf[3] != buf[1] && buf[3] != buf[0])
{
for (int x=0; x<5; x++)
{
buf[4] = str[x];
if (buf[4] != buf[3] && buf[4] != buf[2]
&& buf[4] != buf[1] && buf[4] != buf[0])
{
printf("%s\n", buf);
}
}
}
}
}
}
}
}
}
}
return 0;
}
来这个满足你要求,哈哈!!穷举
能力值:
( LV2,RANK:10 )
13 楼
估计楼主要求是
5位数=rand(5)
if (5位数==全不同)
组合=5!
elseif(5位数==某2位相同 and 5位数==某3位不同)
组合=5!/2!
elseif(5位数==某2位相同 and 5位数==另数某2位不同)
组合=5!/(2!*2)
elseif(5位数==某2位相同 and 5位数==某3位相同)
组合=5!/(2!*3!)
elseif..........把情况都写上..
能力值:
( LV2,RANK:10 )
14 楼
12楼的算法好怪 输入的怎么是一个字符串
13楼的做法太复杂了吧 穷举要多少个if else 呢
能力值:
( LV2,RANK:10 )
15 楼
输入字符串 输入整数都可以啊 你愿意的话也可以输入整数 然后出来再变换一样的 呵呵!
我只是把输入的数据用字符串来处理 比如 12345 就是字符串12345 str[0] = '1' str[1] = '2' 以此类推 然后穷举所有不重复的组合!
这个方法比较暴力 把事情都丢给电脑做了,不适合大量数据,但是如果只是5个的话 那还是可以的
能力值:
( LV2,RANK:10 )
16 楼
你都说了随机了。。。。。。
既然是随机,连计算机都预先不可知出现的数的是否不同,重负,还是多重重负(两个数都是出现2次)
x,x,x,x,x肯定要把所以出现的情况考虑进去
否则要真想不到如何能快速处理,未知数的组合........
能力值:
( LV2,RANK:10 )
17 楼
我想到的就是动态规划,加上递归,还要排除0开头的情况
能力值:
( LV2,RANK:10 )
18 楼
好像LZ的意思不用排除0吧,不是组成数值,而是序列吧 类似0,1,2,3,4 应该是符合规则的吧....
能力值:
( LV2,RANK:10 )
19 楼
5L说的是对的,而代码正如11L发的那样,12L理解错了题意。
估计lz之所以没做出来是没想到用continue。
能力值:
( LV9,RANK:170 )
20 楼
这题只是费脑胞,对于智力开发没有意义!
你整过排列组合这就是基础题.
能力值:
( LV2,RANK:10 )
21 楼
这个。。。还可以重复?不就是做五个数字的全排列嘛!总共5!=120个结果。
你给的题目没有条件限制,无需任何技术和技巧,要使该题有难度可以这样:任意给出5个数字,用这五个数字组成所有可能组成的数。满足:(1)生成的数不重复(如:给出的数字中有两个重复数码,不做处理生成的数字中相同的那两个数码交换位置,所得到的数是一样的。)(2)首位不能为零。当然这只是一个特例了,普遍情况应该把5变成n。
能力值:
( LV2,RANK:10 )
22 楼
这个应该要考虑一下几个问题:
①在给出的数种是否有 ’ 0 ‘ 这个元素 , 如果是零的 你仍然要做全排列的话,就只能非零数在第一位;你这个零的个数问题,看到你的描述中,在输入元素中的元素是可以相同的,因此,我这里问一句:0 这个数是否也可以重复?
②穷举的问题。当五个元素互不相等且没有一个为0的时候,那么穷举是可以的。当元素存在相等的时候,就要考虑元素相等的问题。我在这里假设元素的个数为N(1<=n<=5),不注意这N个元素的排序,那么就有以下组合。1:1:1:1:1 、1:1:1:2、1:1:3、1:4、5、2:3,对应的所有可能的组合的个数是5!,5!/2!, 5!/3!,5!/4!,5!/5!,5!/2!/3! 这么个情况。这些情况中需要考虑到是否有 0 这个数 如果有 肯定比上面的还要少。
③建议你去看看高中的排列组合问题,那个至少说明了一种方法----穷举!
希望对你有帮助。我是编程菜鸟!!
能力值:
( LV2,RANK:10 )
23 楼
全排列?
void swap(char *x,char *y)
{
char tmp=*x;
*x=*y;
*y=tmp;
}
void Ana(char *s ,int j,int k)
{
if(j!=k)
{
for(int i=j;i<=k;i++)
{
swap(&s[j],&s[i]);
if(j!=i || j==0)
printf("%s\n",s);
Ana(s,j+1,k);
swap(&s[j],&s[i]);
}
}
} int main(int argc, char* argv[])
{
char test[]="12345";
Ana(test,0,4);
return 0;
}
能力值:
( LV2,RANK:10 )
24 楼
int a[5];
....
sort(a, a + 5);
do {
int t = 0;
for(int i = 0; i < 5; ++i) {
t = t * 10 + a[i];
}
if(t >= 10000) printf("%d\n", t);
} while(next_permutation(a, a + 5));