• 《信息学奥赛一本通》回文数(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转化为整数数组a
     string s;
     cin>>n>>s;
     //读入字符串s
     memset(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++)
     {//反序数b
      b[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;
     //步数初始化为0
     while(ans<=30)
     {
      ans++;
      jia(a);
      if(check(a))
      {
       cout<<ans<<endl;
       return 0;
      }
     }
     cout<<"impossible";
     return 0;
    }
    
  • 相关阅读:
    PRISM概率模型检测器初使用--骰子模型(改进版)
    什么是P问题、NP问题和NPC问题
    kali linux进行arp欺骗和dos攻击
    java log日志的输出。
    sublime text3输入中文的问题.
    java 正则表达式匹配字符串
    python tornado+mongodb的使用
    jasper3
    jasper2
    jasper
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339608.html
Copyright © 2020-2023  润新知