特殊回文数(蓝桥杯)

问题描述:

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。
 
解答:
整体思路:
枚举并逐个判断
 
细节:
回文数据的按位处理
 
个人参考代码:
 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n;
 8     cin>>n;
 9     
10     for(int data=10000;data<100000;data++)   //五位数情形 
11     {
12         int a=data/10000;
13         int b=(data/1000)%10;
14         int c=(data/100)%10;
15         int d=(data/10)%10;
16         int e=data%10; 
17         
18         if(a==e&&b==d) 
19         {
20             int sum=a+b+c+d+e;
21             if(sum==n) cout<<data<<endl;
22         }
23     }
24     
25     for(int data=100000;data<1000000;data++)   //六位数情形 
26     {
27         int a=data/100000;
28         int b=(data/10000)%10;
29         int c=(data/1000)%10;
30         int d=(data/100)%10;
31         int e=(data/10)%10;
32         int f=data%10;
33         
34         if(a==f&&b==e&&c==d) 
35         {
36             int sum=a+b+c+d+e+f;
37             if(sum==n) cout<<data<<endl;
38         }
39     }
40     
41     return 0;
42 }

运行超时代码——vector版本:

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n;
 9     cin>>n;
10     
11     for(int data=10000;data<=999999;data++)
12     {
13         int dataTemp=data;
14         
15         vector<int> dataArray;
16         
17         while(dataTemp!=0)
18         {
19             dataArray.push_back(dataTemp%10);
20             dataTemp/=10; 
21         }
22         
23         int flag=1;
24         int sum=0;
25         for(int i=0;i<=dataArray.size()/2;i++)
26         {
27             if(dataArray[i]!=dataArray[dataArray.size()-1-i])
28             {
29                 flag=0;
30                 break;
31             }
32         }
33         
34         if(flag==1)
35         for(int i=0;i<=dataArray.size()-1;i++)
36         {
37             sum+=dataArray[i];
38         }
39         
40         
41         if(flag==1&&sum==n)
42         cout<<data<<endl;
43     }
44     
45     return 0;
46 } 

 教训:慎用vector容器处理动态内存,vector容器处理动态内存非常耗时

猜你喜欢

转载自www.cnblogs.com/bilibiliya/p/10301023.html