8.21日 滴滴笔试
1、设a,b,c是0到9之间的整数(其中a,b,c互不相同),
其中abc和acc是两个不同的三位数,现给定一正整数n,
问有多少对abc和acc能满足abc+acc=n(a≠0)?
输入描述
一个正整数n(100<n<2000)。
输出描述
第一行输出有多少对满足要求的数字。
接下来每一行输出一对abc和acc,以空格分隔。
如果没有一对abc和acc的话,则直接输出0即可。如果有多对,请按照abc升序的次序输出。
样例输入
1068
样例输出
1
524 544
小明被吓醒了,他赶紧拿笔在纸上面画了一条斐波那契蛇。
这是一个蛇形迂回的斐波那契数列,它是一个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
#笔试题目##滴滴#
其中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,不难,比大疆和顺丰的简单。
腾讯云智研发成长空间 5084人发布
