CCF准备日记——201912-1
题目编号:201912-1
题目名称:稀疏向量
使用语言:Java(Eclipese)
题目描述:
我的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();//总共报的数字
int[] numJump = new int[4];//每人跳过的数字
int curNum = 1;//当前数字
while(n>0) {
if(curNum%7==0 || ((Integer.toString(curNum)).indexOf("7"))!=-1) {//如果是7有关的
numJump[(curNum-1)%4] += 1;
curNum++;
}else {
curNum++;
n--;
}
}
System.out.println(numJump[0]);
System.out.println(numJump[1]);
System.out.println(numJump[2]);
System.out.println(numJump[3]);
}
}
我的分析:
- 这道题目的难度很小,只用了不到30行代码一次提交便通过了。思路非常简单实现起来也没有复杂的地方,但有两个小难点需要经过一定的思考。
- 第一个小难点是如何判定当前数字curNum与7有关,也就是该数字是7的倍数或者包含7这个数字。7的倍数很好判定只需要用取模运算%即可。而包含7这个数字就无法用数值计算的方法判定,我的思路是将其转换成字符串,然后调用indexOf函数,如果字符串中不包含indexOf函数的输入,函数是会返回-1,因此可以根据这个方法来判定是否包含7这个数字。
- 第二个小难点在于如何轮流让甲乙丙丁报数,也就是说如何构建当前数字与甲乙丙丁的对应关系,方便统计各自跳过的个数。实现方法也很简单只需要对4取余即可。但需要注意的是需要对curNum-1之后再对4取余,因为数组的下标是从0开始的。