给定一个 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 16:05:35 浏览: 169
这道题目是要我们找到一个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。
相关问题
现在有一个无限大的斐波那契数列构成的数组arr, 现给定一个整数N和一个整数K, 将N拆分成K个整数n1, n2,...,nk , (可以拆分成两个相同的数,例如 N= 10 K= 2 就可以拆分成 n1 = 5 , n2 = 5) , 并且n1, n2,...,nk都属于arr , 如果可以满足这种拆分返回Yes, 否则返回No.
可以回答这个问题。我们可以先将arr中的斐波那契数列按照从小到大的顺序排序,然后使用动态规划的方法,设dp[i][j]表示前i个斐波那契数列中是否存在一种方案,使得它们的和为j。则有状态转移方程:dp[i][j] = dp[i-1][j] || dp[i-1][j-arr[i]],其中arr[i]表示第i个斐波那契数列的值。最终,如果dp[k][N]为true,则返回Yes,否则返回No。
题目描述 给定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;
}
阅读全文