c語言列印排列
A. c語言 列印給定字元串的所有排列
#include <stdio.h>
void pern(char s[],int k)
{int i;
char c;
if(k==2)
printf("%s ",s);
else
for(i=k;i<=2;i++)
{c=s[k];s[k]=s[i];s[i]=c;
pern(s,k+1);
c=s[k];s[k]=s[i];s[i]=c;
}
}
void print_all_permutations(char *str)
{ pern(str,0);
return;
}
int main(void)
{ char str[256] = "ABC";
print_all_permutations(str);
return 0;
}
B. C語言如何列印一個數組排列組合
N個元素中取出M個元素的所有排列
#include
<stdio.h>
#define
MAX
10int
used[MAX];
int
result[MAX];
int
M,
N;void
print()
{
int
i;
for(i
=
0;
i
<
M;
i++)
printf("%d
",
result[i]);
printf("\n");}void
Perm(int
step)
{
int
i;
if
(step
==
M)
print();
else
for(i
=
0;
i
<
N;
i++)
if
(!used[i])
{
used[i]
=
1;
result[step]
=
i
+
1;
Perm(step
+
1);
used[i]
=
0;
}}main()
{
scanf("%d
%d",
&M,
&N);
Perm(0);
}
N個元素中取出M個元素的所有組合
#include<stdio.h>#define
MAX
20int
c[MAX]
=
{0};int
M,
N;void
print()
{
int
i;
for(i
=
0;
i
<
M;
i++)
printf("%d",
c[i
+
1]);
printf("\n");}void
Comp(int
m)
{
if
(m
==
M
+
1)
print();
else
for(c[m]
=
c[m
-
1]
+
1;
c[m]
<=
N
-
M
+
m;
c[m]++)
Comp(m
+
1);}void
main()
{
scanf("%d
%d",
&M,
&N);
Comp(1);}
C. c語言代碼輸出排列的問題
你確定那是書上的代碼???要原樣輸出,搞個 幹啥? 相當於3空格(是縮進的說!!!)
我給個代碼吧!!!
#include<stdio.h>
voidmain(){
printf("Hithere! ");
printf(". ");
printf("Butreallyit'sonlymoretext. ");
printf(" Hey,waitaminute!!Whatwasthat??? ");
printf(" 1.Abird? ");
printf("2.Aplane? ");
printf("3.Acontrolcharacter? ");
printf("? ");
system("pause");
}
D. 用C語言編程:列印由字元A、B、C、D組成的所有全排列。
#include<stdio.h>
#include<string.h>char a[20];
int lenth;
long count=0;void main()
{void move(int,int);
int i,j=0;
printf("input:");gets(a);
lenth=strlen(a);
for(i=0;i<lenth;i++)
move(j,i);//move a[i] to the front of a[j];
printf("\ntotal=%d\n",count);
}
void move(int here,int which)//move a[which] to the front of a[here];
{char b[20];
char temp;
int m,n;
if(here<lenth-1)
{if(here!=which)
{for(m=0;m<lenth;m++)
b[m]=a[m];
temp=a[which];
for(m=which;m>here;m--)
a[m]=a[m-1];
a[m]=temp;
}
for(n=here+1;n<lenth;n++)
move(here+1,n);
if(here!=which)
for(m=0;m<lenth;m++)
a[m]=b[m];
}
else
{printf("%-10s",a);
count++;}
} 運行程序時輸入ABCD即可本程序可以輸入任意字元序列。如12345等。
E. c語言中,如何輸出一個數組的全排列!如a[3]={1,2,3} 要求輸出1 2 3,1 3 2,
#include <stdio.h>
#define N 3
int a[N];
void perm(int);
void print();
void swap(int, int);
int main()r> {
int i,n;
int offset;
for(i = 0; i<N; i++)
a[i] = i + 97;
perm(0);
}
void perm(int offset)
{
int i, temp;
if(offset == N-1)
{
print();
return;
}
for(i = offset; i < N; i++)
{
swap(i, offset);
perm(offset + 1);
swap(i, offset);
}
}
void print()
{
int i;
for(i = 0; i < N; i++)
printf(' %c ',a[i]);
printf('\n');
}
void swap(int i, int offset)
{
int temp;
temp = a[offset];
a[offset] = a[i];
a[i] = temp;
}
F. 如何使用C語言編寫一個列印所給數的所有排列
不用遞歸是因為費時間和空間
當然,數字大了pc算不過來, 本題只能輸入小數, 即使遞歸也不會榨乾係統資源, 所以在這里遞歸也無所謂...
不過嘛, 就這樣好了...迭代美
組合
#include <stdio.h>
#include <malloc.h>
#include <time.h>
main()
{
int m,n,p=0;
char *r,*letter,c;
FILE *f=fopen("1.txt","w");
clock_t s;
scanf("%d%d",&m,&n);
r=(char*)malloc(m+1);
letter=(char*)malloc(m+1);
memset(r,0,m+1);
memset(letter,0,m+1);
s=clock();
while(1)
{
if(letter[p]==n-m+p+1)
{
p--;
if(p==-1)
break;
continue;
}
c=letter[p]++;
r[p]=c+49;
if(p==m-1)
fputs(r,f),fputc('\n',f);
else
{
p++;
letter[p]=letter[p-1];
}
}
printf("耗時%10.3f秒",(clock()-s)/1000.0);
fclose(f);
free(letter);
free(r);
}
排列
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <time.h>
int main()
{
int m,n,p=0,i;
char *letter,*pos,*r;
FILE *f=fopen("1.txt","w");
clock_t s;
puts("A(m,n):\n(注:m<=n)");
scanf("%d%d",&m,&n);
letter=(char*)malloc(m+1);
pos=(char*)malloc(m+1);
r=(char*)malloc(m+1);
memset(letter,0,m+1);
memset(pos,0,m+1);
memset(r,0,m+1);
s=clock();
while(1)
{
for(i=pos[p],i?r[i-1]=0:0;i<m;i++)
{
if(!r[i])
{
r[i]=letter[p]+49;
pos[p]=i+1;
if(p==m-1)
fputs(r,f),fputc('\n',f);
else
{
p++;
letter[p]=letter[p-1]+1;
}
break;
}
}
if(i==m)
letter[p]++,pos[p]=0;
if(letter[p]==n-m+p+1)
p--;
if(p==-1)
break;
}
printf("耗時%10.3f秒",(clock()-s)/1000.0);
fclose(f);
free(letter);
free(r);
free(pos);
return 0;
}
G. C語言實現輸入一個字元串後列印出該字元串中字元的所有排列 拜託加點
啥價所有字元的所有排列,比如abc 就輸出abc,acb,bac,bca,cab,cba?
H. 求個c語言程序 列印123456的排列!謝謝了!
建立一個控制台應用程序即可運行
#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;
}
I. 初學C語言,請問列印下圖這種*的排列方式的語言怎麼寫居中排列的。
如前面的回答者所說,嚴格按你圖中的排列在字元界面貌似真弄不出來
我做了個近似的:
代碼:
#include<stdio.h>
voidmain()
{
inti,j,n;
printf("請輸入要列印的行數:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=n-i;j>0;j--) //列印n-i個空格
printf("");
for(j=1;j<=2*i-1;j++)//列印2i-1個*
printf("*");
printf("
");
}
}