• 蓝桥杯----特殊的回文


    问题描述
      123321是一个非常特殊的数,它从左边读和从右边读是一样的。
      输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
    输入格式
      输入一行,包含一个正整数n。
    输出格式
      按从小到大的顺序输出满足条件的整数,每个整数占一行。
    样例输入
    52
    样例输出
    899998
    989989
    998899
    数据规模和约定
      1<=n<=54。
     
     
    枚举+判断
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int ans[1000005];
    int main()
    {
      int n,now,t=0;
      cin>>n;
      if(n%2==0)//只有偶数才有6位十进制数的可能
      {
        now=n/2;
        for(int i=9;i>=1;i--)//第一位不能为0
        {
          if(now-i>=0)
          {
            for(int j=9;j>=0;j--)
            {
              if(now-i-j>=0)
              {
                for(int k=9;k>=0;k--)
                {
                  if(i+j+k==now)
                  {
                    ans[t++]=i*100000+j*10000+k*1000+k*100+j*10+i;
                  }
                }
              }
            }
          }
        }
      }
      //五位数的情况
        int l;
        if(n%2==0)
        {
          l=8;
        }
        else
          l=9;
        for(int i=l;i>=0;i=i-2)//先考虑最中间位数的情况,如果n是偶数,则最中间的一定是偶数,如果n是奇数,则中间位为奇数
        {
          if(n-i>=0)
          {
            now=(n-i)/2;
            for(int j=9;j>=1;j--)//首位不为0
            {
              if(now-j>=0)
              {
                for(int k=9;k>=0;k--)
                {
                  if(j+k==now)
                    ans[t++]=j*10000+k*1000+i*100+k*10+j;
                }
              }
            
            }
          }
    
        }
      sort(ans,ans+t);
      for(int i=0;i<t;i++)
      {
          cout<<ans[i]<<endl;
      }
      return 0;
    }
    问题描述
      1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
    输出格式
      按从小到大的顺序输出满足条件的四位十进制数。
     
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int ans[1000005];
    int main()
    {
      int n,t=0;
      for(int n=1;n<=18;n++)
      {
        for(int i=9;i>=1;i--)
        {
            if(n-i>=0)
            {
                for(int j=9;j>=0;j--)
                {
                    if(i+j==n)
                        ans[t++]=i*1000+j*100+j*10+i;
                }
            }
        }
      }
      sort(ans,ans+t);
      for(int i=0;i<t;i=i+1)
      {
          cout<<ans[i]<<endl;
      }
      return 0;
    }
  • 相关阅读:
    上学要迟到了【最短路转化】
    解方程【狄利克雷卷积+莫比乌斯反演+积性函数】
    FFT
    min25 筛
    Easy【生成函数】
    CF1406D-Three Sequences
    Alice和Bob赌糖果【赌徒破产模型】
    记MySQL自增主键修改无效的问题
    JVM学习笔记(十一、JDK分析工具)
    JVM学习笔记(十、GC3-垃圾回收机制)
  • 原文地址:https://www.cnblogs.com/-citywall123/p/9954979.html
Copyright © 2020-2023  润新知