當前位置:編程學習大全網 - 編程語言 - C語言從8選6全組合過濾相同數字

C語言從8選6全組合過濾相同數字

#include<stdio.h>

#define M 8 //8個數

#define N 6 //選6個

int step=0; //步,也就是生成的數組到第幾個了

int old[100][N]; //把生成的數組放到這個二維數組中

int num[100]; //作輸出記錄

int T=0;

int router(int *s,int *str)

{

int i,j,k,sum;

for(j=0;j<N;j++) //把新生成的組合放到old數組中

{

old[step][j]=s[j];

}

step++;

for(i=0;i<step-1;i++) //控制從記錄下來的第壹個數組開始判斷

{

sum=0;

for(j=0;j<T;j++) //判斷old[i][]是否輸出過

{

if(num[j]==i)

break;

}

if(j>=T) //j>=T說明沒有與輸出記錄相同的

continue; //所以就不用判斷了

for(j=0;j<N;j++) //old數組的遍歷

{

for(k=0;k<N;k++) //s數組的遍歷

{

if(old[i][j]==s[k]) //如果old數組中有數與s數組相同

sum++; //則sum++

}

}

if(sum==5) //如果有五個相同的

{

return 0;

}

}

num[T]=step-1; //記錄輸出了的數組的下標,以供下次判斷用

T++;

return 1;

}

void pl(int *str,int *s,int t)

{

int i;

if(t==N && router(s,str)) //t==N 算完了壹行,並且符合規則,就輸出

{

for(i=0;i<N-1;i++)

{

if(str[s[i]]<10) //小於10就加個0在前面

{

printf("0");

}

printf("%d-",str[s[i]]);

}

if(str[s[i]]<10) //小於10就加個0在前面

printf("0");

printf("%d\n",str[s[i]]);

}

else

{

for(i=t;i<M;i++)

{

if(t==0 || s[t-1]<i)

{

s[t]=i;

pl(str,s,t+1); //這遞歸

}

}

}

}

int main()

{

int s[M],str[]={1,2,3,6,8,9,12,16};

pl(str,s,0);//str是要求排序的數字,s是用來排序,最後以s為下標(str(s[]))的形式輸出的

//0表示從下標0開始

return 0;

}

/*

不想班門弄斧了,不過見沒人回答就做壹下,看對不對吧

思路:

把排列好的數記錄到壹個數組中,每次輸出前都判斷

是否有和前面輸出過的數相同數是五個的,如果有相

同則不輸出,沒有,就輸出,並記錄下輸出的數組所在

下標,以供下次判斷時用.

*/

  • 上一篇:數控專業在哪裏找工作比較好壹點...
  • 下一篇:常用的工控軟件有哪些(工業控制器有哪些)?
  • copyright 2024編程學習大全網