201912-1_报数
时间限制: 1.0s
内存限制: 512.0MB
题目描述
甲乙丙丁决定玩一个报数的游戏来打发时间。游戏规则为四个人从1开始轮流进行报数,但如果需要报出的数是7的倍数或含有数字7则直接跳过。
此外大家约定,在总共报出了n个数后(不计入被跳过的数)游戏结束。现在需要你来帮忙统计,游戏过程中每个人各自跳过了几次。
输入格式:
从标准输入读入数据。
输入仅一行,包含一个正整数n,表示报出了多少个数后游戏结束。
输出格式:
输出到标准输出。
输出共四行,每行一个整数,依次表示甲乙丙丁四人在游戏过程中跳过的次数。
样例1:
输入
20
输出:
2
1
1
0
解释
报数过程为:
甲:1,乙:2,丙:3,丁:4
甲:5,乙:6,丙:跳过,丁:8
甲:9,乙:10,丙:11,丁:12
甲:13,乙:跳过,丙:15,丁:16
甲:跳过,乙:18,:19,丁:20
甲:跳过,乙:22,丙:23,丁:24
在丁报出24后,四个人总计报出了20个数,游戏结束。
样例2:
输入
66
输出:
7
5
11
5
解释
子任务
测试点1、2、3、4和5,保证
n
≦
1
0
2
n\leqq 10^2
n≦102;
测试点6、7、8、9和10,保证
n
≦
666
n\leqq 666
n≦666。
提示
想法
子任务虽然只到666就结束了,但是再数据跳过的过程中会出现大过700的的数据所以要考虑百位数的可能
import java.util.Scanner;
public class Main {
static int a=0;
static int b=0;
static int c=0;
static int d=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
for(int i=1;i<=N;i++) {
if(i%7==0 || i/100==7 || (i%100)/10==7 || ((i%100)%10)==7){
Fl(i);
++N;
}
}
System.out.printf("%d\n%d\n%d\n%d\n",a,b,c,d);
}
static void Fl(int i) {//分类方法
switch(i%4) {
case 1:
a++;
break;
case 2:
b++;
break;
case 3:
c++;
break;
case 0:
d++;
}
}
}