其中abc和acc是两个不同的三位数,现给定一正整数n,
问有多少对abc和acc能满足abc+acc=n(a≠0)?
输入描述
一个正整数n(100<n<2000)。
输出描述
第一行输出有多少对满足要求的数字。
接下来每一行输出一对abc和acc,以空格分隔。
如果没有一对abc和acc的话,则直接输出0即可。如果有多对,请按照abc升序的次序输出。
样例输入
1068
样例输出
1
524 544
#include <iostream> #include<vector> #include<algorithm> #include<unordered_map> using namespace std; bool compare(const pair<int, int>& a, const pair<int, int>& b) { return a.first < b.first; } int main() { int n; cin >> n; int sumAbc=1,sumAcc=1; vector<pair<int, int>> result; for (int i = 1; i <= 9; ++i) { sumAbc = i; sumAcc = i; for (int j = 0; j <= 9; ++j) { if (j == i) continue; int sumAbc2 = sumAbc * 10 + j; int sumAcc2 = sumAcc; for (int k = 0; k <= 9; ++k) { if (k == i || k == j) continue; int sumAbc3 = sumAbc2 * 10 + k; int sumAcc3 = sumAcc2 * 10 + k; sumAcc3 = sumAcc3 * 10 + k; if (sumAbc3 + sumAcc3 == n) result.push_back(make_pair(sumAbc3, sumAcc3)); } } } if (result.size() > 0) { sort(result.begin(), result.end(), compare); cout << result.size() << endl; for (auto& a : result) { cout << a.first << " " << a.second << endl; } } else { cout << 0 << endl; } return 0; }2、小明昨晚做了一个梦。在梦里,很多很多斐波那契数连成了一条蛇。突然,最大的那个数变成了蛇头,把小明一口给吞到肚子里去了。
小明被吓醒了,他赶紧拿笔在纸上面画了一条斐波那契蛇。
这是一个蛇形迂回的斐波那契数列,它是一个n*n的矩阵,在上面的矩阵中n=3。第1行第1列是最大值,然后按照顺时针的次序数字逐渐变小。
下面是n=4时的情况:
小明希望你能够编写一个程序,输入一个正整数n,然后逐行逐列输出斐波那契蛇形矩阵中的元素。
输入描述
单组输入,输入数据占一行,包含一个正整数n,表示斐波那契蛇形矩阵的大小。(n<10)
输出描述
输出数据占一行,逐行逐列(从第1行开始到第n行,每一行从第1列开始到第n列)输出斐波那契蛇形矩阵中的元素,每两个数字之间用一个空格隔开。
样例输入
3
样例输出
34 21 13
1 1 8
2 3 5
#include <iostream> #include<vector> #include<algorithm> #include<unordered_map> using namespace std; int main() { int n; cin >> n; if (n == 1) { cout << 1 << endl; return 0; } vector<size_t> nums(n*n,0); nums[0] = 1; nums[1] = 1; for (int i = 2; i < n * n; ++i) { nums[i] = nums[i - 1] + nums[i - 2]; } reverse(nums.begin(), nums.end()); vector<vector<size_t>> result(n, vector<size_t>(n, 0)); int up = 0, bottom = n - 1, right = n - 1,left = 0,index = 0; while (up <= bottom && left <= right) { for (int i = left; i <= right; ++i) { result[up][i] = nums[index++]; } up++; if (up > bottom && left > right) break; for (int i = up; i <= bottom; ++i) { result[i][right] = nums[index++]; } right--; if (up > bottom&& left > right) break; for (int i = right; i >= left; --i) { result[bottom][i] = nums[index++]; } bottom--; if (up > bottom&& left > right) break; for (int i = bottom; i >= up; --i) { result[i][left] = nums[index++]; } left++; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << result[i][j]; if (j != n - 1)cout << " "; else cout << endl; } } return 0; }两道全A,不难,比大疆和顺丰的简单。
全部评论
(5) 回帖