大学计算机基础C语言实验习题选(2)实验4-5简单枚举(出的比较较好)类似水仙花数

实验4-5 数字组合

编写程序abcd.c,设有十进制数字a,b,c,d,e,求满足下列式子:abc*e=dcba(a≠0,e≠0且e≠1)的最大的abcd。

格式要求 输入:无输入 输出: 求出满足条件的abcd, printf(“abcd=%d\n”, abcd)

保存,编译、运行、测试成功后将源程序文件(.c或.cpp)压缩,提交。

提示:abc是指由数字a,b,c组合得到的3位整数,即a100+b10+c dcba,abcd也是组合得到的。

和求水仙花数有点像,比较好的入门枚举题

方法一:直接做

具体细节看注释

#include<stdio.h>
#include<string.h>
int main()
{
    int i,j,t,tot=0,temp;
    int a[1000+5];
    memset(a,0,sizeof(a));
    for(i=100;i<=999;i++)//从100枚举到999,三位数abc
    {
        temp=(i%10)*100+(i/10%10)*10+i/100;//把abc变成cba
        if(temp<100)//显然如果换过来不是3位数,肯定是无解的,因为cba是三位数
        {
            continue;//跳过这次循环,到下一次
        }
        for(j=1;j<=9;j++)
        {
            t=i*j;
            //printf("%d\n",t);
            if(t>1000&&t%1000==temp)
            {
                a[tot++]=i*10+t/1000;
                //printf("%d %d\n",a[tot-1],j);//这句代码测试用,你可以看到具体的abcd和e
            }
        }
    }
    /*for(i=0;i<tot;i++)
    {
        printf("%d\n",a[i]);
    }*/
    //上面的代码也是测试使用 ,检查是否正常运行,输出所有满足条件的数
    printf("%d",a[tot-1]);//按要求取最大的数
    return 0;
}

给出其他可行解
4992 6
5992 5
8023 4
9018 9
9676 7
abcd e

方法二:打表

直接输出答案就行了,时间复杂度o1,答案实际上是9676

#include<stdio.h>
#include<string.h>
int main()
{
    int abcd=9676;
    printf("abcd=%d\n",abcd);
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章