有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?能给出c的程序吗?不要3个for循环嵌套的算法要有效率一点,最好能以此扩展,例如:10个,20...
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
能给出c的程序吗?
不要3个for循环嵌套的
算法要有效率一点,最好能以此扩展,例如:10个,20个能组成多少个互不相同且无重复数字的三位数?都是多少? 等等。。。。
谢谢 展开
能给出c的程序吗?
不要3个for循环嵌套的
算法要有效率一点,最好能以此扩展,例如:10个,20个能组成多少个互不相同且无重复数字的三位数?都是多少? 等等。。。。
谢谢 展开
5个回答
2013-08-30
展开全部
我也给你来了个不是 三个FOR的。。MAX 是最大数。可以实现你的 其他 个数,N 是组成的位数。可以自己改。
#include "stdio.h"
#define MAX 4
#define N 3
int digit[N]={1,2,2};
int flag[MAX+1]={0};
int goup()
{
int i;
for(i=N-1;i>=0;i--)
{
if(i!=0&&digit[i]>MAX)
{
digit[i]=1;
digit[i-1]++;
}
}
if(digit[0]==MAX+1) return 1;
else return 0;
}
int check()
{
int i;
int flag[MAX+1]={0};
for(i=0;i<N;i++)
{
if(flag[digit[i]]==1) return 1;
else flag[digit[i]]=1;
}
return 0;
}
int main()
{
int i=0,j;
for(;;)
{
digit[N-1]++;
if(goup()) break; //当digit[0]等于4时
if(check()) continue;
for(j=0;j<N;j++) printf("%d",digit[j]);
i++;
printf("\t");
if(i%8==0) printf("\n");
}
return 0;
}
#include "stdio.h"
#define MAX 4
#define N 3
int digit[N]={1,2,2};
int flag[MAX+1]={0};
int goup()
{
int i;
for(i=N-1;i>=0;i--)
{
if(i!=0&&digit[i]>MAX)
{
digit[i]=1;
digit[i-1]++;
}
}
if(digit[0]==MAX+1) return 1;
else return 0;
}
int check()
{
int i;
int flag[MAX+1]={0};
for(i=0;i<N;i++)
{
if(flag[digit[i]]==1) return 1;
else flag[digit[i]]=1;
}
return 0;
}
int main()
{
int i=0,j;
for(;;)
{
digit[N-1]++;
if(goup()) break; //当digit[0]等于4时
if(check()) continue;
for(j=0;j<N;j++) printf("%d",digit[j]);
i++;
printf("\t");
if(i%8==0) printf("\n");
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-30
展开全部
定义了两个常量,M为最小的那个数字,N为最大的数字,如果要修改范围把这两个值改了就行了,但十进制要做的10个,20个能组成多少个互不相同且无重复数字的三位数的要求也太奇怪了吧。下面这个程序。在0~9中,可以求数字连续的互不相同且无重复数字的三位数
#include<stdio.h>
#define M 1
#define N 4
void main()
{int i,j,k,sum=0;<br/> for(i=M;i<=N;i++)<br/> for(j=M;j<=N;j++)<br/> for(k=M;k<=N;k++)<br/> if(i!=j&&i!=k&&j!=k)<br/> {printf("%d%d%d\n",i,j,k);<br/> sum++;<br/> }
printf("总共有%d个\n",sum);
}
#include<stdio.h>
#define M 1
#define N 4
void main()
{int i,j,k,sum=0;<br/> for(i=M;i<=N;i++)<br/> for(j=M;j<=N;j++)<br/> for(k=M;k<=N;k++)<br/> if(i!=j&&i!=k&&j!=k)<br/> {printf("%d%d%d\n",i,j,k);<br/> sum++;<br/> }
printf("总共有%d个\n",sum);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-30
展开全部
这个问题退化为了一排列组合问题.可以先定义一个数组用以表示N个个位数,这样会方便些。其次不可能编出比上面程序高效的算法,因为这样的三位数个数为N×(N-1)×(N-2)。即该问题的时间复杂性为N的三次方。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-30
展开全部
我记得侯捷的书上一句话说得很好:
勿在浮沙筑高台
如果你觉得你对这个问题很困惑,为什么不再花点时间看看基础的,数据结构,算法导论 等
PS:经常碰到,你给我答案就可以了,其他的不要。首先这个态度很不友好,最重要的是这个学习方法事倍功半
勿在浮沙筑高台
如果你觉得你对这个问题很困惑,为什么不再花点时间看看基础的,数据结构,算法导论 等
PS:经常碰到,你给我答案就可以了,其他的不要。首先这个态度很不友好,最重要的是这个学习方法事倍功半
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-30
展开全部
你等等,我给你编不要3个for的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询