日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《信息学奥赛一本通》回文数(Noip 1999)

發布時間:2024/4/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《信息学奥赛一本通》回文数(Noip 1999) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

若一個數(首位不為零)從左往右讀與從右往左讀都是一樣,,我們就將其稱之為回文數。例如:給定一個10進制數56,將56加65(即把56從右往左讀),得到121是一個回文數。又如,對于十進制數87,step1:87+78=165step2:165+561=726step3:726+627=1353step4:1353+3531=4884在這里的一步是指進行了一次n進制的加法,上例最少用了4步得到回文數4884.寫一個程序,給定一個n(2<n<=10或n=16)進制數m。求最少經過幾步可以得到回文數。如果在30步以內(包含30步)不可能得到回文數,則輸出“impossible”。

【輸入樣例】

9 87

【輸出樣例】

6

【算法分析】

n進制運算
1.當前位規范有10%改為n%
2.進位處理由/10改為/n
3.其他運算規則不變

【參考代碼】

#include <iostream> #include <cstring> using namespace std; int n,a[101],b[101],ans,i; void init (int a[]) {//將數串s轉化為整數數組astring s;cin>>n>>s;//讀入字符串smemset(a,0,sizeof(a));//數組a清零a[0]=s.length();//用a[0]計算字符串s的位數for(i=1;i<=a[0];i++){if(s[a[0]-i]>='0'&&s[a[0]-i]<='9'){a[i]=s[a[0]-i]-'0';}else{a[i]=s[a[0]-i]-'A'+10;}} } bool check(int a[]) {//判別整數數組a是否為回文數for(i=1;i<=a[0];i++){if(a[i]!=a[a[0]-i+1])return false;}return true; } void jia(int a[]) {//整數數組a與其反序數b進行n進制加法運算int i,k;for(i=1;i<=a[0];i++){//反序數bb[i]=a[a[0]-i+1];}for(i=1;i<=a[0];i++){//逐位相加a[i]+=b[i];}for(i=1;i<=a[0];i++){//處理進位a[i+1]+=a[i]/n;a[i]%=n;}if(a[a[0]+1]>0){//修正新的a的位數(a+b最多只能進一位)a[0]++;} } int main () {init(a);if(check(a)){cout<<0<<endl;return 0;}ans=0;//步數初始化為0while(ans<=30){ans++;jia(a);if(check(a)){cout<<ans<<endl;return 0;}}cout<<"impossible";return 0; }

總結

以上是生活随笔為你收集整理的《信息学奥赛一本通》回文数(Noip 1999)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。