试题C——答案:12
问题描述
对于整数 v 和 p,定义 Pierce 序列为:
a[1] = v
a[i] = p % a[i-1]
例如,当 v = 8, p = 21 时,对应的 Pierce 序列为
a[1] = 8
a[2] = 5
a[3] = 1
再往后计算,值变为 0,不在我们考虑的范围内。因此当 v = 8, p = 21 时, Pierce 序列的长度为 3。
当 p 一定时,对于不同的 v 值,Pierce 序列的长度可能不同。当 p = 8 时,若 1<=v<p,最长的 Pierce 序列出现在 v=13时,为(13, 8, 5, 1),长度为 4。
当 p=2021 时,最长的 Pierce 序列出现在 v=1160 时,请问这个序列有多长?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int v=1160;
int p=2021;
int a=v;
int ans=1;
while(a!=0){
a=p % a;
ans++;
}
System.out.print(ans-1); //多加了0的那种情况,记得减掉
}
}
试题E——答案:BYS
问题描述
在 Excel 中,第 1 列到第 26 列的列名依次为 A 到 Z,从第 27 列开始,列名有两个字母组成,第 27 列到第 702 列的列名依次为 AA 到 ZZ。
之后的列再用 3 个字母、4 个字母表示。
请问,第 2021 列的列名是什么?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个有大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。
直接计算:
Z:0+26=26
ZZ:26+26 * 26=702
AZZ:702+26 * 26=1378
BZZ:1378+26 * 26=2054
BYZ:2054-26=2028
往前推即可
试题F
问题描述
在书写一个较大的整数时,为了方便看清数位,通常会在数位之间加上逗号来分割数位,具体的,从右向左,每三位分成一段,相邻的段之间加一个逗号。
例如,1234567 写成 1,234,567。
例如,17179869184 写成 17,179,869,184。
给定一个整数,请将这个整数增加分割符后输出。
输入格式
输入一行包含一个整数 v。
输出格式
输出增加分割符后的整数。
样例输入
1234567
样例输出
1,234,567
样例输入
17179869184
样例输出
17,179,869,184
数据规模和约定
对于 50% 的评测用例,0 <= v < 10^9 (10的9次方)。
对于所有评测用例,0 <= v < 10^18 (10的18次方)。
import java.util.Scanner;
public class F3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
long n=s.nextLong();
String ans = "";
while(n!=0){
ans=n%1000+ans;
n=n/1000;
if(n>0) ans=","+ans;
}
System.out.print(ans);
}
}
试题G
问题描述
斐波那契数列是这样一个数列:它的第一项和第二项都是1,从第三项开始每一项都是前两项的和。
根据以上定义,我们容易计算出斐波那契数列的前几项依次是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ……
现在请你计算斐波那契数列第N项是奇数还是偶数?
输入格式
输入的包含一个整数N。
输出格式
如果是奇数输出1,是偶数输出0。
样例输入
10
样例输出
1
数据规模和约定
对于所有评测用例,1 <= N <= 1000000000。
提示
找规律。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n % 3 == 0) {
System.out.println(0);
} else {
System.out.println(1);
}
}
}
试题H
问题描述
给定一个矩阵 M,由 n 行 m 列组成,第 i 行第 j 列值为 M[i][j]。
定义矩阵 M 的重量为矩阵中所有元素的和,几位weight(M)
请找到矩阵左上角的一个子矩阵S(矩阵的前 r 行中的前 c 列组成),使得这个子矩阵的重量的两倍最接近矩阵 M 重量。即 |2 weight(S)-weight(M)| 最小。
如果有多个子矩阵满足条件,请找出面积 r * c 最小的一个。
如果仍然有多个子矩阵满足条件,请找出其中 r 最小的一个。
输入格式
输入第一行包含两个整数 n, m,表示矩阵的大小。
接下来 n 行,每行 m 个整数,表示给定的矩阵M。
输出格式
输出一行,包含两个整数 r, c,表示子矩阵为矩阵 M 的前 r 行中的前 c 列。
样例输
3 4
3 0 1 1
1 0 1 1
1 1 -2 4
样例输出
2 3
数据规模和约定
对于 30% 的评测用例,1 <= n, m <= 20, -10 <= M[i][j] <= 10。
对于 50% 的评测用例,1 <= n, m <= 100, -100 <= M[i][j] <= 100。
对于所有评测用例,1 <= n, m <= 1000, -1000 <= M[i][j] <= 1000。
import java.util.Scanner;
public class H3 {
static int mw = 0, n, m;
static int[][]M;
static int r = 1, c = 1, d = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
M = new int[n+1][m+1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
M[i][j] = sc.nextInt();
mw += M[i][j];
}
}
int[][] w = new int[n + 1][m + 1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
w[i][j] = w[i - 1][j] + w[i][j - 1] - w[i - 1][j - 1] + M[i][j];
check(w[i][j], i, j);
}
}
System.out.println(r + " " + c);
}
public static void check(int x, int i, int j) {
if (Math.abs(2 * x - mw) < d || Math.abs(2 * x - mw) == d && i * j < r * c) {
r = i;
c = j;
d = Math.abs(2 * x - mw);
}
}
}
这篇博客探讨了几个编程题目,涉及斐波那契数列的奇偶性判断、Pierce序列的长度计算、Excel列名的生成以及矩阵子区域的选择,这些都是计算机科学中的基本概念和算法应用。
9555

被折叠的 条评论
为什么被折叠?



