1. 程式人生 > 實用技巧 >ACM題目 1434: [藍橋杯][歷屆試題]迴文數字

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\n",i);
        }
    }
    if(flag=0)
    {
        printf("-1\n");
    }
    
    return 0;
}

  是因為

if(flag=0)
    {
        printf("-1\n");
    }
這一部分應該是單獨的邏輯關係,而我把它混在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\n",i);
        }  
    }
    if(flag==0)
        {
        printf("-1\n");
        }
    return 0;
}