今天收到粉丝提问啦,抽空编个小代码解答一下啦!感谢他的信任!(以下是我的答案,仅供参考,如有错误,欢迎指正,谢谢)
题目:
连续整数和:花椰妹在纸上写下了若干个连续的正整数,她把这些数遮挡住,只告诉蒜头君一共有k个数,它们的和为n,请蒜头君猜猜纸上是哪些数。现在蒜头君向你求助,帮他解决这个问题。
要求:
输入:两个整数n和k。输出:一行,k个整数从小到大输出。
代码:(C++语言)
#include <iostream> #include <stdio.h> #include <ctype.h> #include<algorithm> #include<cstring> #include<stdlib.h> using namespace std; #define MAX 100; int s2i(string s); int check(string s); int check_n(string s); int check_k(string s); int check_chinese(string s); int sum(int i, int j); int main() { string n0,n1; int k, n; cout<<"请输入连续正整数的个数k(1<=k<=100):"<<endl; cin >> n0; while (check(n0) || check_k(n0)) { cout << "请输入0-100的正整数,不要输入负数或者小数或字母或汉字或超出范围的数:" << endl; cin >> n0; } cout << "请输入k个连续的正整数和的值n:" << endl; cin >> n1; while (check(n1)|| check_n(n1)){ cout << "请输入1<=k<=10^9的正整数,不要输入负数或者小数或字母或汉字或超出范围的数:" << endl; cin >> n1; } k = s2i(n0); n = s2i(n1); while (true) { int i, j; char flag = false; for (i = 1; i <= n / 2; i++) { for (j = i; j < n; j++) { if (sum(i, j) == n && (j - i + 1 )==k) { flag = true; for (int p = i; p <= j; p++) cout << p << " "; cout << endl; break; } } } if (flag == false) cout << "不存在"<<k<<"个连续的正整数和的值为"<<n << endl; break; } return 0; } int check_chinese(string s) { string t; for (int i = 0; i < s.length(); i++) { if (s[i] < 255 && s[i]>0) //扩充的ASCII字符范围为0-255,如是,处理一个字节 { t.append(s.substr(i, 1)); t.append("/"); } else //<0,>255的是汉字,处理两个字节 { t.append(s.substr(i, 2)); t.append("/"); ++i; return -1; } } return 0; } int sum(int i, int j) { return (i + j) * (j - i + 1) / 2; } int s2i(string s) { return atoi(s.c_str()); } int check(string s) { if (check_chinese(s)==-1) { return -1; } else { char* a = new char[s.length()]; strcpy(a, s.c_str()); int i; for (i = 0; i < s.length(); i++) { if (!isdigit(a[i])) { return -1; } } return 0; delete[]a; a = NULL; } } int check_k(string s) { int k; k = s2i(s);//string转为int存储 if (k < 1 || k>100) { return -1; } else { return 0; } } int check_n(string s) { int n; n = s2i(s);//string转为int存储 if (n < 1 || n> pow(10, 9)) { return -1; } else { return 0; } }
运行结果:
用户不合理输入测试: