您的位置:首页 > 产品设计 > UI/UE

回文数列输出,运用stringstream,以及queue

2018-02-02 18:39 169 查看
#include<sstream>stringstream s;s.str()s << <<#include <iostream>#include <queue>#include <sstream>using namespace std;queue<string> que_6;/*问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。 输入格式    输入一行,包含一个正整数n。 输出格式   按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例输出 899998989989998899数据规模和约定   1<=n<=54。*//*首先想想回文的特点,对称,即只看一半即可。分两种情况。5位的和六位的,分别区别处理。想要跑快一点,一次循环处理五位的和六位的。有要求从小到大输出,即可以先把六位先放在queue里,先入先出。带五位的输出完,再打出。*/void deal(int num) {int a, a1, a2, a3, temp = 0;if (num % 2 == 1) {for (int i = 100; i <= 999; i++) {a = i;a1 = a / 100;a = a % 100;a2 = a / 10;a3 = a % 10;/*减少循环次数,用离散数学的角度来解释的话,可以说:这是一个包含的时间(a1  + a2 + a3 > num) >= (a1 + a2 > num) >= (a1 > num)这种情况用嵌套的if判断。而对等的情况是时件互斥的时使用。*/if (a1 + a2 + a3 > num) {if (a1 + a2 > num) {if (a1 > num) {i = 1000;}i = 100 * (a1 + 1);}i = a1 * 100 + (a2 + 1) * 10;}if (a1 * 2 + a2 * 2 + a3 == num) {cout << i << a2 << a1 << endl;}}}else if (num % 2 == 0) {for (int i = 100; i <= 999; i++) {a = i;a1 = a / 100;a = a % 100;a2 = a / 10;a3 = a % 10;if (a1 + a2 + a3 > num) {if (a1 + a2 > num) {if (a1 > num) {i = 1000;}i = 100 * (a1 + 1);}i = a1 * 100 + (a2 + 1) * 10;}if (a1 * 2 + a2 * 2 + a3 == num) {cout << i << a2 << a1 << endl;}if (a1 * 2 + a2 * 2 + a3 * 2 == num) {stringstream s; //注意stringstream用法s << i << a3 << a2 << a1 << endl;que_6.push(s.str());}}while (que_6.empty() == 0) {cout << que_6.front();que_6.pop();}}}int main() {int num;cin >> num;deal(num);system("pause");return 0;}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐