给定一个 k 位整数 n=d \r\nk−1\r\n\r\n 10 \r\nk−1\r\n +⋯+d \r\n1\r\n\r\n 10 \r\n1\r\n +d \r\n0\r\n\r\n (0≤d \r\ni\r\n\r\n ≤9, i=0,⋯,k−1
时间: 2023-05-02 12:05:35 浏览: 175
这道题目是要我们找到一个k位数n,满足n的第一位是-1,第k位是d,而且n-1是10的倍数。
具体的情况可以通过列举几个数字来进行分析:
当k=2时,可得到的数字为-10、-20、-30、-40、-50、-60、-70、-80、-90。
当k=3时,可得到的数字为-109、-118、-127、-136、-145、-154、-163、-172、-181、-190。
当k=4时,可得到的数字为-1090、-1180、-1270、-1360、-1450、-1540、-1630、-1720、-1810、-1900。
可以发现,当k为偶数时,n-1的最后一位就是0,因此d的取值只能为0或5。
当k为奇数时,n-1的最后两位为90时,n就是10的倍数,此时d的取值可以为任何一个数字。
因此,该题的答案为:
当k为偶数时,d可以取0或5。
当k为奇数时,d可以取0、1、2、3、4、5、6、7、8、9。
相关问题
给定一个正整数 k,请问对于每一个 1 到 n 之间的序号 i,a[i-k], a[i-k+1], ..., a[i+k] 这 2k+1 个数中的最小值是多少?当某个下标超过 1 到 n 的范围时,数不存在,求最小值时只取存在的那些值。
对于每个 i,我们可以找到 a[i-k] 到 a[i+k] 中的最小值,然后在所有的最小值中找到最小值即可。具体实现可以使用一个大小为 2k+1 的滑动窗口,每次滑动窗口时更新最小值。时间复杂度为 O(nk)。
题目描述 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中1≤i≤j≤K, 10000>=Ni >=-10000。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。 本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下: 数据1:与样例等价,测试基本正确性; 数据2:100个随机整数; 数据3:1000个随机整数; 数据4:10000个随机整数; 数据5:100000个随机整数; 数据6: 整数全为负数; 输入 输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。 输出 在一行中输出最大子列和。如果序列中所有整数都为负数,则输出0。输出代码
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 100010;
int main() {
int k;
int arr[MAXN]; // 存放序列
cin >> k;
for (int i = 0; i < k; i++) {
cin >> arr[i];
}
int sum = 0, ans = -1;
for (int i = 0; i < k; i++) {
sum += arr[i];
ans = max(ans, sum); // 更新最大子列和
if (sum < 0) {
sum = 0; // 如果当前子列和为负数,则舍去,从下一个数重新开始累加
}
}
cout << ans << endl;
return 0;
}
阅读全文
相关推荐
















