记一道算法编程题

 

爱健身的小王

  • 描述:

小王是一个喜欢健身的人,他每天都会围着一个n*n的场地外侧跑步。
他是一个有强迫症的人,每跑n+1个单位长度,他就要在地上做一个标记。
当他在一个点重复标记的时候,他就会结束当天的锻炼。
显然当n一定时,他每天打标记的数量也是一定的。请你计算出来他每天要打多少标记(最后一次重复标记也要计数)。

  • 输入:

第一行包含一个正整数t,表示询问的数量。

第二行包含t个整数,中间用空格隔开,每个整数表示一个询问所给出的n,$1 \le n \le 1000$。

  • 输出:

输出共t行,$1 \le t \le 10000$。

每行包含一个正整数,其中第i行的整数表示第i个询问的答案。

  • 样例输入:

2
4 8

  • 样例输出:

17
33

  • 样例解释:

对于4*4的场地而言,其边界上的16个点都会被标记,因为起点会被标记两次,所以共17次。

  • 解题思路:最小公倍数

  • 参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<bits/stdc++.h>
using namespace std;

int gcd(int a,int b){
return b?gcd(b,a%b):a;
}

int main() {
int T;
cin>>T;
while(T--) {
int n;
cin>>n;
int d=gcd(4*n,n+1);
cout<<4*n/d+1<<endl;
}
return 0;
}