zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
    

      

    
    
  • 相关阅读:
    shell脚本控制
    Oracle语句优化53个规则详解
    oracle 查看 用户,用户权限,用户表空间,用户默认表空间
    建Oracle表空间,指定用户默认表空间,增加数据文件
    建Oracle表空间,指定用户默认表空间,增加数据文件
    shell 日期参数
    shell 日期参数
    Oracle语句优化53个规则详解
    Trac 经验谈之(4)报表篇
    trac 经验谈之(3)工作流篇
  • 原文地址:https://www.cnblogs.com/redzzy/p/13678157.html
Copyright © 2011-2022 走看看