求个c语言程序 打印123456的排列!谢谢了!

有没有不是穷举的 简单说下算法也行!

第1个回答  2010-10-19
建立一个控制台应用程序即可运行
#include <iostream>
using namespace std;

#define Type char

//交换数组中的两个元素的位置
void Swap(Type* list, int origin, int target)
{
Type temp = list[origin];
list[origin] = list[target];
list[target] = temp;
}

//产生list[currentIndex:count]的所有全排列
void Perm(Type* list, int currentIndex, int count)
{
if(currentIndex == count)
{
for(int i = 0; i < count; i ++)
cout << list[i];

cout << endl;
}
else
{
for(int i = currentIndex; i < count; i ++)
{
Swap(list, currentIndex, i);
Perm(list, currentIndex + 1, count);
Swap(list, currentIndex, i);
}
}
}

int main()
{
Type list[] = {'1','2','3', '4', '5', '6'};
Perm(list, 0, 6);
return 0;
}
第2个回答  2010-10-19
void main()
{ int i0,i1,i2,i3,i4,i5,i6
for(i0=1;i<=6;i++)
{
printf("%d ",i0);
for(i1=1;i<=6;i++)
{ if(11==i0)
printf("%d ",i1);
for(i2=1;i<=6;i++)
{ if(i2!=i0&&i2!=i1)
printf("%d ",i2);
for(i3=1;i<=6;i++)
{ if(i3!=i2&&i3!=i1&&i3!=i0)
printf("%d ",i3);
for(i4=1;i<=6;i++)
{ if(i4!=i3&&i4!=i2&&i4!=i1&&i4!=i0)
printf("%d ",i4);
for(i5=1;i<=6;i++)
{ if(i5!=i4&&i5!=i3&&i5!=i2&&i5!=i1&&i5!=i0)
printf("%d ",i5);
}
}
}
}
}
}
}本回答被提问者采纳

C语言中怎样将一个字符串的第0,2,4,6,8……位置的字符复制到另一个...
include<string.h> intmain(){ charstr1[]="123456",str2[7];inti,j=0,len;len=strlen(str1);for(i=len-1;i>=0;i--){ str2[j++]=str1[i];} str2[6]='\\0';printf("%s",str2);return0;} \/\/方法二指针法 include<stdio.h> include<string.h> intmain(){ charstr1[]=...

...1 12 123 1234 12345 123456 要求等边三角形,三角形不会啊
C语言编程 for循环 .屏幕上输出如下图形: 1 12 123 1234 12345 123456 要求等边三角形,三角形不会啊 求大神,我在考试#include<stdio.h>voidmain(){inti,j;for(i=1;i<=6;i++){for(j=1;j<=i;j++){printf("%d",j);}printf("\\n");}}这样输出是112123123412345123456这个样子的,现在要求等... 求...

找出123456这六个数的全排列,但是貌似数太大!c语言
if(n1!=n2&&n2!=n3&&n3!=n4&&n4!=n5&&n5!=n6&&n6!=n1)\/\/六个数都不相同return 1;这个判断是错误的,举例:121212这个数,在你的逻辑里面会return 1;这显然不符合题意。造成的结果就是,你table[cur++]的次数超过了1000次,数组溢出了。

C语言,如何将一个个输入的数字变成一串数字一起输出来,求解~
include<stdio.h>int main(void){char c;long num = 0;while((c = getchar()) != '\\n'){if(c >= '0' && c <= '9'){num = num * 10 + (c - '0');}}printf("num = %d\\n", num);}代码比较简单,就不写注释了,相信你能看懂。希望对你有所帮助。

C语言 求解析为什么程序运行后输出结果为123 456
a[3],a[4],a[5]); \/\/向文件d2.dat写入了456 然后 fscanf(fp, "%d%d", &k,&n); \/\/从文件d2.dat中输入两个值到两个变量k和n中, 从文件得到的值分别是123和456,所以k=123, n=456 所以 printf("%d %d\\n", k,n); \/\/输出k和n,分别是123和456,所以结果就是123 456 ...

C语言 以下程序输入123456<CR>后的执行结果是多少? #include <stdio_百 ...
a=12,b=345 scanf("%2d%3d",&a,&b);分别截取两位和三位整数存入变量a,b 可以查下scanf函数的用法,就明白了。百度百科 http:\/\/baike.baidu.com\/link?url=nXbbkRKHL63STPUReq_9nEH1N1PiMoUuziahx275FPPJ70Znebsirpq9ksOO4MPMf5yKYfzhoz3ZFwrYQvRyxK ...

用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF...
\/\/数码管段选 \/* 8 9a b c def*\/code uchar wen[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};\/\/数码管位选uchar huancun[] = {0x00,0x00,0x00,0x00,0x00,0x00};\/\/数码管段选缓存sbit duan = P2^6;\/\/段选sbit wei = P2^7;\/\/位选void delay(uchar x)\/\/延时函数...

二级c语言关于文件的操作
fread(a,sizeof(int),3,fp); 从文件里面读取3个int,覆盖a的前三个int数据值 fclose(fp) 关闭文件 那么结果就是 4,5,6,4,5,6 开始把 1 2 3 4 5 6读入文件,fseek(fp,sizeof(int)*3,SEEKSET),文件指针移动3个int,现在指向4了 在读取3个int,把456覆盖a原来数组的1 2 3 所...

C语言编程求s=1+12+123+12345+123456+1234567+12345678的值_百度...
你的题目应该还要加1234吧 include<stdio.h> void main(){ int i,s=1,t=1;for(i=2;i<=8;i++){ t = t*10 +i;\/\/t是这是增量 s += t;\/\/s放和 } printf("s=%d\\n",s);}

...实现将任意的正整数按反序输出。例如:输入 123456,输出为 654321...
include "stdio.h"void intrev(int n){if(n){printf("%d",n%10);intrev(n\/10);}}int main(int argc,char *argv[]){int x;printf("Please enter a positive integer...\\n");if(scanf("%d",&x)!=1 || x<1){printf("Input error, exit...\\n");return 0;}intrev(x);...

相似回答
大家正在搜