给一个四位数,先判断是不是11的整数倍,若是则输出,不是就把四位数重新排列,在形成的新的四位数中判断是不是11的整数倍,如此循环我想知道有什么好办法可以把4位数重新排列组合的?...
给一个四位数,先判断是不是11的整数倍,若是则输出,不是就把四位数重新排列,在形成的新的四位数中判断是不是11的整数倍,如此循环
我想知道有什么好办法可以把4位数重新排列组合的?
我开始是这么想的,但是我这样不能排列有重复数字的数字组合,比如1122。
代码如下
#include
void main(){
int n[4],res[50],i,j,k,l,m=0,max,mark,count,number=0;
printf("输入一个四位数,系统将为你重新排序 \n");
scanf("%1d%1d%1d%1d",&n[0],&n[1],&n[2],&n[3]);
for(i=0;i<4;i++){ //例举所有四位数各不相等的新组合,但是我这样写就
for(j=0;j<4;j++){ 不能重新排列1122这样有重复数字的四位数了。
for(k=0;k<4;k++){
for(l=0;l<4;l++){
if((n[i]!=n[j]&&n[j]!=n[k]&&n[k]!=n[l]&&n[i]!=n[k]&&n[i]!=n[l]&&n[j]!=n[l])&&n[i]!=0){
printf("%d%d%d%d\n",n[i],n[j],n[k],n[l]);
res[m]=1000*n[i]+100*n[j]+10*n[k]+n[l];
m++;
}
}
}
}
}
count=0;
do{
if(res[count]%11==0){
printf("%d是11的整数倍 \n",res[count]);
count++;
number++;
}
else{
count++;
}
}while(res[count]<=10000&&res[count]>=1000);
if(number==0){
printf("该数所有的排列组合都不能被11整除! \n");
return;
}
展开