今天浅浅练了俩题,第二个总是通不过,无语,后来发现了,非常低级的错误字符串地方没看准位置错误o((>ω< ))o
1.美丽的2024
小蓝刚学习完二进制知识,所以现在他对任何数字的二进制都特别感兴趣。恰好即将迎来 2024 年,他想知道2024 的二进制中几个1?
输入格式
本题为填空题,无输入。
输出格式
输出一个整数表示答案。
这道题十进制转换为二进制,模式为第一次时十进制数取余2,将得到的数字倒叙排列,即作为二进制数字的第一位,并判断此数是否为1,是则将1的次数+1。后将十进制数除以2,在进行取余运算,模为2,再将此值作为二进制的第二位。依次递推,直到最后一次这个十进制数/2为==0时,循环结束。写程序时即满足十进制数>0作为循环条件即可。
在进行倒序排列时,整数类型+字符串可直接转换为字符串类型
技巧:通过没有借助包装类 String s3=""+num;(String res="";)
倒序:将res=j%2+res;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int num=2024;
int n=0;
String res="";
for(int j=num;j>0;j/=2){
if(j%2==1){
n++;
}
res=j%2+res;
}
System.out.println(n);
}
}
2. 自助餐【算法赛】
食堂最近推出了自助取餐功能,可以通过盘子的形状自动计算费用。你参与到自助计算价格的项目工作中,视觉组的同学已经帮你通过图像识别把盘子图片转换为了字符串,你只需要计算具体的价格即可。
餐盘的费用如下表所示:
餐盘种类 | yuanxing | zhengfangxing | changfangxing |
价格 | 1 | 2 | 3 |
餐盘种类 | sanjiaoxing | tuoyuanxing | liubianxing |
价格 | 4 | 5 | 6 |
你将会得到n 个字符串,请按照价格表计算价格。
输入格式
第一行一个整数n,表示盘子个数。
接下来一行 n 个字符串,用空格隔开,表示不同的盘子。保证每个字符串都是题目描述中提到的六种之一。
输出格式
一行,一个整数,表示答案。
输入样例
5
yuanxing zhengfangxing changfangxing sanjiaoxing changfangxing
说明0<n≤100。
这道题就是统计用户输入的字符串,根据字符串我们对照表格计算出每个相应字符串的出现频率。
创建一个字符串元素为n的数组,通过循环遍历输入给每个字符串数组赋值,将每个字符串数组和表格上的类别进行比较,从而确定价格,进而计算出最终价格。
要注意在比较两个字符串是否一样时,要通过str1.equals(str2)来比较。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n =scan.nextInt();
String[] type=new String[n];
int n1=0,n2=0,n3=0,n4=0,n5=0,n6=0;
for(int i=0;i<n;i++){
type[i]=scan.next();
if(type[i].equals("yuanxing")){
n1++;
}else if(type[i].equals("zhengfangxing")){
n2++;
}else if(type[i].equals("changfangxing")){
n3++;
}else if(type[i].equals("sanjiaoxing")){
n4++;
}else if(type[i].equals("tuoyuanxing")){
n5++;
}else if (type[i].equals("liubianxing")){
n6++;
}
}
int price=0;
price=1*n1+2*n2+3*n3+4*n4+5*n5+6*n6;
System.out.println(price);
scan.close();
}
}