深度优先

这个家伙好懒,除了文章什么都没留下

0%

【算法】数字游戏

历届试题 数字游戏

时间限制:1.0s 内存限制:256.0MB

问题描述

栋栋正在和同学们玩一个数字游戏。

游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈。栋栋首先说出数字1。接下来,坐在栋栋左手边的同学要说下一个数字2。再下面的一个同学要从上一个同学说的数字往下数两个数说出来,也就是说4。下一个同学要往下数三个数,说7。依次类推。

为了使数字不至于太大,栋栋和同学们约定,当在心中数到 k-1 时,下一个数字从0开始数。例如,当k=13时,栋栋和同学们报出的前几个数依次为:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。

游戏进行了一会儿,栋栋想知道,到目前为止,他所有说出的数字的总和是多少。

输入格式

输入的第一行包含三个整数 n,k,T,其中 n 和 k 的意义如上面所述,T 表示到目前为止栋栋一共说出的数字个数。

输出格式

输出一行,包含一个整数,表示栋栋说出所有数的和。

样例输入

3 13 3

样例输出

17

样例说明

栋栋说出的数依次为1, 7, 9,和为17。

数据规模和约定

1 < n,k,T < 1,000,000;

之前写了一种穷举的法方然后只得了50分。然后在网上看了别人写的,结果也是得分不全。

穷举一个个的找:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;

public class 数字游戏 {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
int T=sc.nextInt();

System.out.println(f(n,k,T));
}

private static String f(int n, int k, int t) {

int shu=1;
int conut=0;
int sum=0;
for (int i = 0; i < t; i++) {
for (int j = 0; j < n; j++) {
shu+=conut;
conut++;
while(shu>k-1){
shu=shu-k;
}
if(j==0)
sum+=shu;
}
}
return sum+"";
}
}

网上别人写的(他是用C语言写的,然后我改成java的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;

public class 数字游戏2 {

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

while(sc.hasNext()){
int n=sc.nextInt();
int k=sc.nextInt();
int t=sc.nextInt();

long sum=1,l=1,r=n,x=1;
for (int i = 1; i < t; i++) {
x+=(l+r)*n/2;
x=x%k;
sum+=x;
l=1+i*n;
r=n+i*n;
}
System.out.println(sum);
}
}
}