c语言类型,实在不会了

img

一个循环就能解决的问题,就从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,要直接变成8765continue;
        }
        if(i%100 == 20)
        {
            i=(i/100-1)*100+(i/100%10-2)*10+(i/100%10-2);//前面9820,要直接变成9765continue;
        }
        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;
 }