10.9做題——USACO1.2/洛谷1206迴文平方數(Palindromic Squares)

洛谷1206 迴文平方數

本題地址: http://www.luogu.org/problem/show?pid=1206

題目描述
迴文數是指從左向右念和從右向左念都一樣的數。如12321就是一個典型的迴文數。

給定一個進制B(2<=B<=20,由十進制表示),輸出所有的大於等於1小於等於300(十進制下)且它的平方用B進製表示時是迴文數的數。用’A’,’B’……表示10,11等等
輸入輸出格式
輸入格式:
共一行,一個單獨的整數B(B用十進制表示)。
輸出格式:
每行兩個B進制的符合要求的數字,第二個數是第一個數的平方,且第二個數是迴文數。

輸入輸出樣例
輸入樣例#1:
10

輸出樣例#1:
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

說明
題目翻譯來自NOCOW。
USACO Training Section 1.2

額,我無語了,一個簡單的模擬題,但我在洛谷上AC的代碼(有圖爲證!這裏寫圖片描述
這裏寫圖片描述
居然在USACO上過不了,同樣的數據!我自己直接驗證也對啊···
這裏寫圖片描述
USACO的評測系統不會有問題吧···
附上這不知對錯的代碼吧···

/*
    ID: 保密
    PROG: palsquare
    LANG: C++
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int b,k,l,l1;
char a[15],c[15];
char change(int x)
{
    if(x<10)
        return x+'0';
    else
        return (x-10)+'A';
}
int main()
{
    freopen("palsquare.in","r",stdin);
    freopen("palsquare.out","w",stdout);
    bool flag;
    int i,j;
    cin>>b;
    for(i=1;i<=300;i++)
    {
        k=i;
        l1=0;
        while(k>0)
        {
            l1++;
            c[l1]=change(k%b);
            k/=b;
        }
        k=i*i;
        l=0;
        while(k>0)
        {
            l++;
            a[l]=change(k%b);
            k/=b;
        }
        flag=false;
        for(j=1;j<=l/2;j++)
            if(a[j]!=a[l-j+1])
            {
                flag=true;
                break;
            }
        if(flag==false)
        {
            for(j=l1;j>=1;j--)
                cout<<c[j];
            cout<<" ";
            for(j=l;j>=1;j--)
                cout<<a[j];
            cout<<endl;
        }
    }
    return 0;
}
//如果誰發現BUG,重重有賞!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章