目录
小易的升级之路_牛客题霸_牛客网
小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?
输入描述:
对于每组数据,第一行是两个整数n(1≤n<100000)表示怪物的数量和a表示小易的初始能力值. 然后输入n行,每行整数,b1,b2...bn(1≤bi≤n)表示每个怪物的防御力
输出描述:
对于每组数据,输出一行.每行仅包含一个整数,表示小易的最终能力值
示例1
输入:
3 50 50 105 200 5 20 30 20 15 40 100
输出:
110 205
思路:
如果怪物能力小于等于小易的能力,那就直接让小易的能力加怪物能力
如果怪物能力大于小易的能力,那就需要求怪物能力和小易能力的最大公约数,之后小易的能力加上该公约数即可。
注意点:
1.while多组输入(一般将代码写完之后,再整体套入while(scanner.hasNextInt()))
2.求最大公约数的方法
代码实现:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int n = scanner.nextInt();//怪物的数量
int a = scanner.nextInt();//小易的初始能力值
int[] arr = new int[n];//每个怪物的防御力
//循环接收每个怪物的防御力
for(int i = 0; i < arr.length; ++i){
arr[i] = scanner.nextInt();
}
//循环打怪
for(int num : arr){
//怪物的防御 <= 小易的能力值
if(num <= a){
a += num;
}else{//怪物的防御>小易的能力值
a += fun(a,num);
}
}
System.out.println(a);
}
}
//求最大公约数
/**
* a-->小易当前的能力值,num代表当前怪物的能力值
*/
public static int fun(int a, int num){
int min = a;//因为a小于num,才去判断公约数
for(int i = a; a > 0; --i){
if(a % i == 0 && num % i == 0){
return i;
}
}
return 1;
}
}
找出字符串中第一个只出现一次的字符_牛客题霸_牛客网
描述
找出字符串中第一个只出现一次的字符
数据范围:输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000
输入描述:
输入一个非空字符串
输出描述:
输出第一个只出现一次的字符,如果不存在输出-1
示例1
输入:
asdfasdfo
输出:
o
思路:
开辟一个int类型的数组,大小为26(a-z有26个),遍历字符串,将 字符-'a' 对应的下标进行+1,遍历结束后就能得到一个数组,该数组中存放着每一个字符出现的次数。
接着再将字符串遍历一遍,用每一个 字符 - 'a' 去访问数组对应的下标空间内容,若为1,则证明该字符只出现一次,并且是最先出现的。
注意点:
第一个出现一次的字符,言外之意:可能有多个出现一次的字符,但我要最先出现的字符
拓展:
可以看看这个题,该题是有一个数字只出现一次,求出该数字
只出现一次的数字
代码实现:
import java.util.Scanner;
//这个题求得是:第一个出现一次的字符,言外之意:可能有多个出现一次的字符,但我要最先出现的字符
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
int[] arr = new int[26];//a是65
//全部存入
for(int i = 0; i < str.length(); ++i){
int index = str.charAt(i) - 'a';
arr[index]++;
}
int ret = searchChar(str,arr);
if(ret == -1){
System.out.println(-1);
}else{
System.out.println((char)(ret + 'a'));
}
}
//继续用该字符串查找
public static int searchChar(String str, int[] arr){
for(int i = 0; i < str.length(); ++i){
int index = str.charAt(i) - 'a';
if(arr[index] == 1){
return index;
}
}
return -1;
}
}