① c語言,如何得到n個數的排列
#include<stdio.h>
bool isUse[100];
int order[100];
void change(int *a,int n,int num);
void main()
{
printf("輸入長度n");
int n;
scanf("%d",&n);
int *a=new int [n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for ( i=0;i<100;i++)
{
isUse[i]=0;
}
change(a,n,1);
}
void change(int *a,int n,int num)
{
for (int i=0;i<n;i++)
{
if(isUse[i]==0)
{
isUse[i]=1;
order[num]=i;
if(n>num)
change(a,n,1+num);
else
{
for (int j=1;j<=n;j++)
{
printf("%d",a[order[j]]);
}
printf("\n");
}
isUse[i]=0;
}
}
}
這個只是找出一串數字中的所有的換位數。你可以將那些要變的放在數組里。但這個還有一個缺點,就是對於相同的數字來說不能分開。例如112345,112345前面的1認為是不同的。分給我吧,我可是特意寫的哦。
② 1到25的數字,如何通過C語言實現隨機排列
首先不管是不是通過編譯。
做到隨即排列,需要用到隨機數產生函數。
#include <stdio.h>
#include <time.h>
main()
{
int i;
int cp1[10];
clrscr();
srand((unsigned)time(NULL)); /*隨機數發生器,時間作為種子 */
for(i=0;i<10;i++)
{
cp1[i]=rand()%100+1;/*rand產生的隨機數字*/
}
textcolor(12);
for(i=0;i<10;i++)
{
printf("\n");
cprintf("%d",cp1[i]);
}
getch();
}
以上是列印1到100的隨機數字。
你說的要隨機排列25個數字。
必須要產生25個隨機數字。處理方法有很多,可以採用讓隨機數產生為1~25的數字,但是要保證每個數字不一樣。不能有重復,這個可以通過比較來完成。然後可以一一對應輸出,或者直接輸出產生的隨機數也可以。另外一種方法是允許有重復,但是必須給每個數字1~25和產生的25個隨機數字進行一一對應編號,然後首先按照隨機數對應的輸出,如果遇到相同的隨機數,就隨機數先後順序排下來對應輸出。方法有很多,自己可以思考一下。
③ c語言中怎樣把n個數排列 得到所有排列情況
#include <stdio.h>
inline void Swap(char& a, char& b)
{// 交換a和b
char temp = a;
a = b;
b = temp;
}
void Perm(char list[], int k, int m)
{ //生成list [k:m ]的所有排列方式
int i;
if (k == m) {//輸出一個排列方式
for (i = 0; i <= m; i++)
putchar(list[i]);
putchar('\n');
}
else // list[k:m ]有多個排列方式
// 遞歸地產生這些排列方式
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}
int main()
{
char s[]="123";
Perm(s, 0, 2);
return 0;
}
④ C語言如何實現任意數排列組合,新手求助,急
求排列組合沒有簡單方法。方法只有一個,枚舉。
有幾個位置需要列舉,就需要幾個循環。如果循環數量太多,可以用函數遞歸來枚舉。
常式:
#include<stdio.h>
intmain(){
inta[4]={1,3,4,7};//第一個位置
intb[4]={2,5,8,10};//第二個位置
intc[4]={6,9,11,12};//第三個位置
inti,j,k;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
printf("%d%d%d ,",a[i],b[j],c[k]);//輸出一種排列
getch();
return0;
}
⑤ 怎麼用C語言進行排列比如,1到6 六個數,輸出所有可能的組合
剛回答了一個組合的,現在是排列的。方法類似,採用遞歸方法。
void CopyArrayWithExcept(int a[], int nCount, int b[], int nExcept)
{
for(int i=0, j=0; i<nCount; i++)
{
if(i != nExcept)
{
b[j++] = a[i];
}
}
}
int g_nPrintCount = 0; //為了控制每行輸出10個
int ArrangeAll(int a[], int nCount, char* szPre)
{
if(nCount == 1)
{
printf("%s%d ", szPre, a[0] );
if( (++g_nPrintCount%10==0))
{
printf("\n");
}
return 1;
}
else
{
int nTotal=0;
for(int i=0; i<nCount; i++)
{
char szBuf[10] ={0};
int *pNum = new int[nCount-1];
sprintf(szBuf, "%s%d", szPre, a[i]);
CopyArrayWithExcept(a, nCount, pNum, i);
nTotal += ArrangeAll(pNum, nCount-1, szBuf);
delete[] pNum;
}
return nTotal;
}
}
int main()
{
int a[] = {1,2,3,4,5,6};
int nTotal = ArrangeAll(a, sizeof(a)/sizeof(a[0]), "");
printf("\nTotal Count=%d\n", nTotal);
return 1;
}
⑥ c語言如何生成長度為n的二進制字元串的全排列
#include"stdio.h"
intmain(intargc,char*argv[]){
intn,i,m;
charp[33];
printf("pleaseentern(intn>0)... ");
if(scanf("%d",&n)!=1||n<1||n>32){
printf("Inputerror,exit... ");
return0;
}
for(i=0;i<n;p[i++]='0');
p[i]='