• ACM题目 1434: [蓝桥杯][历届试题]回文数字


    题目描述
    观察数字:12321,123321  都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 

    本题要求你找到一些5位或6位的十进制数字。满足如下要求: 
    该数字的各个数位之和等于输入的整数。 
    输入
    一个正整数  n  (10< n< 100),  表示要求满足的数位和。
    输出
    若干行,每行包含一个满足要求的5位或6位整数。 
    数字按从小到大的顺序排列。 
    如果没有满足条件的,输出:-1 
    样例输入
    44 
    样例输出
    99899
    499994
    589985
    598895
    679976
    688886
    697796
    769967
    778877
    787787
    796697
    859958
    868868
    877778
    886688
    895598
    949949
    958859
    967769
    976679
    985589
    994499
    思路:
    可以用两个方法来判断,一个方法用来判断是否是回文串,另一个方法判断各位数字之和是否等于给定的数字
    但是代码编译以后显示只有17%的用例是通过的
    错误代码:
    #include<stdio.h>
    int turn (int num)//判断是否是回文数字
    {
        int temp=0;
        while(num!=0)
        {
            temp=temp*10+num%10;
            num=num/10;
        }
        return temp;
    }
    int add(int num)//计算各位数字之和
    {
        int sum=0;
        while(num!=0)
        {
            sum=sum+num%10;
            num=num/10;
        }
        return sum;
    }
    int main()
    {
        int i,n;
        int sum;
        scanf("%d",&n);
        int flag=0;
        for(i=10000;i<=999999;i++)
        {
            sum=add(i);
            
            if(i==turn(i)&&sum==n)
            {
                flag=1;
                printf("%6d
    ",i);
            }
        }
        if(flag=0)
        {
            printf("-1
    ");
        }
        
        return 0;
    }
    

      是因为

    if(flag=0)
        {
            printf("-1
    ");
        }
    这一部分应该是单独的逻辑关系,而我把它混在for循环内部了,
    另外一个错误就是判断符号和数字是否相等的时候应该用两个等于号,而不是一个
     正确代码:
    #include<stdio.h>
    int turn (int num)//判断是否是回文数字
    {
        int temp=0;
        while(num>0)
        {
            temp=temp*10+num%10;
            num=num/10;
        }
        return temp;
    }
    int add(int num)//计算各位数字之和
    {
        int sum=0;
        while(num>0)
        {
            sum=sum+num%10;
            num=num/10;
        }
        return sum;
    }
    int main()
    {
        int i,n;
        scanf("%d",&n);
        int flag=0;
        for(i=10000;i<1000000;i++)
        {
            if(i==turn(i)&&n==add(i))
            {
                flag=1;
                printf("%d
    ",i);
            }  
        }
        if(flag==0)
            {
            printf("-1
    ");
            }
        return 0;
    }
    
    
    

      

    
    
  • 相关阅读:
    使用urllib
    spring常用的45个注解
    音痴
    android与JS函数传参遗留问题
    方舟编译器源码过一遍流程
    什么是语义学,解释器
    synchronized,ReentrantLock解决锁冲突,脏读的问题
    【Unity3d】ScrollRect自动定位到某点
    计算点到直线的距离】 C#实现
    理财-房月供占工资多少比较合适?
  • 原文地址:https://www.cnblogs.com/redzzy/p/13678157.html
Copyright © 2020-2023  润新知