1089 - 简单求和
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
}
return ;
}
}
2104 - 求最大公约数
这道题原意思是有N个人,换成一个圈,每次找手帕的原则就是跳过M-1个人。
上图就是一个N=9,M=6的示意图,思考:是不是存在一个间隔x,可以整除N,又因为这个x要符合M选人的轨迹,也就是x要整除M。所以x就是M和N最大公约数,当这个间隔x(最大公约数)大于1,就一定有人会被跳过,永远找不到手帕,所以这道题就变成了求最大公约数的问题。
import java.util.Scanner;
public class Main {
/**
* 最大公约数
* @param a 除数
* @param b 被除数
* @return 最大公约数
*/
public static int getGreatestCommonDivisor(int a, int b){
return a%b == 0 ? b:getGreatestCommonDivisor(b,a%b);
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
int a = sc.nextInt();
int b = sc.nextInt();
if(a == -1 && b ==-1){
break;
}
if(getGreatestCommonDivisor(a,b) == 1){
System.out.println("YES");
} else {
System.out.println("POOR Haha");
}
}
return ;
}
}
2095 - 亦或
这题的原意就是查找一堆数据中出现奇数次的数字。
这题考察的是亦或(^)知识点,当两个数(a,b),亦或成另一个数(c),当这个c再亦或上a,结果就是b。即:
int a = 100;
int b = 201;
int c = a ^ b;
int d = c ^ a;
d结果就是b
所以当偶数个数相同的数亦或同一个变量,变量还是原值;当奇数个相同的数亦或同一个变量,就是原值亦或那个数。
这道题有一个小坑,java的代码在时间上不满足AC通过条件,所以要改成C语言代码。
#include<stdio.h>
int main()
{
int T;
int n,m;
while(~scanf("%d",&T),T){
scanf("%d",&n);
T--;
while(T--){
scanf("%d",&m);
n=m^n;
}
printf("%d\n",n);
}
}