一个循环就能解决的问题,就从9876递减到4321,计算得出每一位数字 ,比如数字9876,得到9,8,7,6,再写if条件判断满足上述条件就输出该数字
两种方法
如果1算是那些倍数的话,就只能把条件那拆开调一下,和下面差不多
#include <stdio.h>
int main()
{
int a,b,c,d,k=0;
for(a=9;a>=4;a--)
for(b=a-1;b>=3;b--)
for(c=b-1;c>=2;c--)
for(d=c-1;d>1;d--)
{
if((a%b!=0 && b%c!=0 && c%d!=0) && (a%2+b%2+c%2+d%2!=0 && a%2+b%2+c%2+d%2!=4))
{
printf("%d,%d\n",++k,a*1000+b*100+c*10+d);
}
}
return 0;
}
如果1算是那些倍数的话,就把if(i%10==1)printf("第%d,%d\n",++k,i);24、25行去掉
#include <stdio.h>
int main()
{
int i,k=0;
for(i=9876;i>=4321;i--)
{
if(i%1000 == 320)
{
i=(i/1000-1)*1000+(i/1000-2)*100+(i/1000-3)*10+(i/1000-3);//前面9320,要直接变成8765,
continue;
}
if(i%100 == 20)
{
i=(i/100-1)*100+(i/100%10-2)*10+(i/100%10-2);//前面9820,要直接变成9765,
continue;
}
if(i%10 == 0)
{
i=i-(10-i%100/10+1);//例如9870这个数,0不符合条件,但是-1变成9869也不符合条件,所以这条语句可以直接从9870变成9866,后面在-1,就从9865开始
continue;
}//这个三个if实现数字1-9组成的数,并且是从左至右降序排列和各位数字都不同,满足前面三个条件
if((i/1000)%(i%1000/100)==0 || (i%1000/100)%(i%100/10)==0 || (i%100/10)%(i%10)==0)//第四个条件
{
if(i%10==1)
printf("第%d,%d\n",++k,i);
continue;
}
if(i/1000%2+i/100%10%2+i%100/10%2+i%1000%2==0 || i/1000%2+i/100%10%2+i%100/10%2+i%1000%2==4)//题目最后一个条件,每个数%2,如果全是偶数和为0,全是奇数和为4,要排除这两个条件
{
continue;
}
printf("第%d,%d\n",++k,i);
}
return 0;
}