详细代码注释1148: 组合三位数之一

题目描述

48: 组合三位数之一
时间限制: 1 Sec 内存限制: 128 MB
提交: 5197 解决: 3705

把1、2、3、4、5、6、7、8、9组合成3个3位数,要求每个数字仅使用一次,使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。
输入

输出
按从小到大的顺序输出这三个三位数,由空格隔开。输出占一行。

代码注释

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main() {
	string str;
	int flag; // 看后面的代码
	int first = 1; // 同上
	// 确保平方后是三位数,可以从 11 的平方开始
	for (int i = 11; i <= 31; i++) {
		str += to_string(i * i); // 将 i * i 的结果变为 字符串
		for (int j = 11; j <= 31; j++) {
			// 把当前的 str 备份到 str2
			string str2 = str;
			str += to_string(j * j);
			for (int k = 11; k <= 31; k++) {
				string str3 = str; // // 把当前的 str 备份到 str3
				str += to_string(k * k);
				flag = 1; 
				for (int m = 1; m <= 9; m++) {
					string temp = to_string(m);
					if (str.find(temp) == string::npos) { // 检查是否包含 1~9 这 9 个数字
						flag = 0; 
						break;
					}
				} // 检查通过的话,flag 还是 1。同时结果有多组,只需要输出第一组就好了。
				if (flag == 1 && first == 1) { // 从 str 中依次截取 3 个字符,并都转换成 数字
					//cout << str.substr(0, 3) << str.substr(3, 3) << str.substr(6, 3) << endl;
					int arr[3] = { stoi(str.substr(0, 3)), stoi(str.substr(3, 3)), stoi(str.substr(6,3)) };
					sort(arr, arr + 3); // 排序
					cout << arr[0] << " " << arr[1] << " " << arr[2] << endl;
					first = 0; // first 赋值为 0 后,后面的几组就不重复输出了
				}
				str = str3;
			}
			// 用备份的 str2 重置 str,用于作为下一个循环的初始 str
			str = str2;
		}
		str.clear();
	}
	return 0;
}

oj 很给力

多刷oj,在实战中成长……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值