本篇博客包含分支结构内得所有题目的题解
P2433 小学数学N合一
不瞒各位说,我那时做这题时是高三学生,做这题竟然做了一个小时:( 真是越学越回去了;(
问题一
我说:“我爱洛谷!!!”
问题二
2+4=6
10-6=4
问题三
14/4=3
3*4=12
fmod(14,4)=2 || 14%4=2 其中fmod(a,b)表示返回a除以b的余数。
问题四
500÷3=166.66666666……≈166.666667
问题五
(260+220)/(12+20)=15
问题六
sqrt(6*6+9*9)=sqrt(117)≈10.81
问题七
100+10=110
110-20=90
90-90=0
问题八
double const pi=3.141593;
double const r=5;
cout<<pi*r*2<<endl<<pi*r*r<<endl<<4.0/3*pi*r*r*r<<endl;
问题九
((x/2-1)/2-1)/2-1)=1
解得 x=22
问题十
这是个牛吃草问题,我就是在这里卡了好久,我也不知道为什么我觉得列的对的方程就是解不出解。
由于测评任务是均匀增加的,所以有些测评机是需要用去完成新增的测评任务,这样,把那些测评机从测评机总数里头减去,就是一个完全的放水问题了。问题是怎么求消耗在新增任务上的测评机呢?
前后两次的花费时间分别为30分钟和6分钟,这之间差了5倍,换句话说,净消耗速率之间差了5倍,速率体现在测评机台数上,所以花费在原本任务上的测评机数量之间也是5倍的差距,这样就好做了。
设花费在新增任务上的测评机数量为x,则(8-x)*5=10-x,解得x=7.5,也就是说有7.5台测评机花费在了新增任务上,剩余的那0.5台测评机完成原有任务需要耗费的时间为30分钟。现在想要10分钟就解决,时间差为3倍,所以净消耗速率得提升3倍,体现在测评机总数上就是0.5*3+7.5=9台。
问题十一
100/(8-5)=33.333333……
问题十二
M是第十三个字母
第十八个字母是R
问题十三
double const pi=3.141593;
double V=pi*4*4*4*4/3+pi*10*10*10*4/3;
cout<<floor(pow(V,1.0/3))<<endl;
问题十四
设降低价格x元,则价格为(110-x)元,报名人数为(10+x)人,列出方程:(110-x)(10+x)=3500化简一下,得到:,解得x=60或40,即定价为50元或者70元,由于题目要求更小的那个,所以选前者。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int T;
cin >> T;
if (T == 1)
{
cout << "I love Luogu!";
}
else if (T == 2)
{
cout << 2 + 4 << " " << 10 - 2 - 4;
}
else if (T == 3)
{
cout<<3<<endl<<12<<endl<<2<<endl;
}
else if (T == 4)
{
printf("%.3lf\n",500.0/3.0);
}
else if (T == 5)
{
cout<<15<<endl;
}
else if (T == 6)
{
cout<<sqrt(6*6+9*9)<<endl;
}
else if (T == 7)
{
cout<<110<<endl<<90<<endl<<0<<endl;
}
else if (T == 8)
{
double const pi=3.141593;
double const r=5;
cout<<pi*r*2<<endl<<pi*r*r<<endl<<4.0/3*pi*r*r*r<<endl;
}
else if (T == 9)
{
cout<<22<<endl;
}
else if (T == 10)
{
cout<<9<<endl;
}
else if (T == 11)
{
cout<<100.0/(8-5)<<endl;
}
else if (T == 12)
{
cout<<13<<endl<<"R"<<endl;
}
else if (T == 13)
{
double const pi=3.141593;
double V=pi*4*4*4*4/3+pi*10*10*10*4/3;
cout<<floor(pow(V,1.0/3))<<endl;
}
else if (T == 14)
{
cout<<50<<endl;
}
return 0;
}
java程序大家自己翻译吧,终于结束了:(
P5709 苹果和虫子
我很好奇,这题和虫子有什么关系?prologue是序幕的意思,难道说小B是虫虫?
题目中已经告诉你了,RE了去查零特判:
#include<iostream>
using namespace std;
int m,t,s;
int main()
{
cin>>m>>t>>s;
if(t==0)
cout<<0;
else if(s%t==0)
if(s/t<m)
cout<<m-(s/t);
else
cout<<0;
else
if(s/t+1<m)
cout<<m-(s/t)-1;
else
cout<<0;
return 0;
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int m=scanner.nextInt();
int t=scanner.nextInt();
int s=scanner.nextInt();
if(t==0){
System.out.println("0");
}else if(s%t==0){
if(s/t<m)
System.out.println(m-(s/t));
else
System.out.println("0");
}else{
if(s/t+1<m)
System.out.println(m-(s/t)-1);
else
System.out.println("0");
}
scanner.close();
}
}
P5710 数的性质
简单的判断:
#include<iostream>
using namespace std;
int main()
{
int a=0,b=0,c=0,d=0,x;
cin>>x;
if(x%2==0 && x>4 && x<=12)
a=1;
if(x%2==0)
b=1;
else if(x>4 && x<=12)
b=1;
if(x%2==0)
if(x<=4 || x>12)
c=1;
else if(x>4 && x<=12)
c=1;
if(x%2!=0)
if(x<=4 || x>12)
d=1;
cout<<a<<" "<<b<<" "<<c<<" "<<d;
return 0;
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int x=scanner.nextInt();
int a=0,b=0,c=0,d=0;
if(x%2==0 && x>4 && x<=12){
a=1;
}
if(x%2==0){
b=1;
}else if(x>4 && x<=12){
b=1;
}
if(x%2==0){
if(x<=4 || x>12){
c=1;
}
}else if(x>4 && x<=12){
c=1;
}
if(x%2!=0){
if(x<=4 || x>12){
d=1;
}
}
System.out.println(a+" "+b+" "+c+" "+d);
scanner.close();
}
}
值得一提的是,在Java里面,“||”和“|”以及“&&”和“&”的意义是不同的。单个|或者单个&和c++里头的||和&&是相同的,都是要将两侧的都计算完再给出结果,而||在java里面有时只会判断一边,如果左侧为true,那么将不再会计算右边的值,因为“或”是只需要一侧为真即可,同理&&在java里面,如果左侧为false,那么右侧将不会被执行。
P5711 闰年判断
依葫芦画瓢:
#include<iostream>
using namespace std;
int year;
bool isr(int year)
{
if(year%4==0 && year%100!=0)
return 1;
else if(year%400==0)
return 1;
else
return 0;
}
int main()
{
cin>>year;
if(isr(year))
cout<<1;
else
cout<<0;
return 0;
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int year=scanner.nextInt();
if(isr(year)){
System.out.println("1");
}else{
System.out.println("0");
}
scanner.close();
}
public static boolean isr(int year){
if(year%4==0 && year%100!=0){
return true;
}else if(year%400==0){
return true;
}else{
return false;
}
}
}
你说你看不懂函数?那函数内部的东西你总看得懂吧。。。
P5712 Apples
当我看到样例输出里头,逗号后面那么长的空挡,我以为用的是中文的“,”,你可以很明显地看到那后面的空挡,但是我提交上去后却WA了,因为那根本不是一个中文逗号,而是一个英文逗号加了一个空格,像这样“, ”真是坑人啊!
#include<iostream>
using namespace std;
string apple="apple";
int num;
int main()
{
cin>>num;
if(num>=2)
apple+='s';
cout<<"Today, I ate "<<num<<" "<<apple<<".";
return 0;
}
import java.util.Scanner;
public class Main{
static String apple="apple";
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int num=scanner.nextInt();
if(num>=2){
apple+='s';
}
System.out.println("Today, I ate "+num+" "+apple+".");
scanner.close();
}
}
P5713 洛谷团队系统
设配置题目数为n,两种配置方式的时间差为2分钟,也就是说如果2n>11那么应该使用洛谷团队系统,反之则应在本地:
#include<iostream>
using namespace std;
int n;
int main()
{
cin>>n;
int ch=0;
ch=(5-3)*n;
if(ch>11)
cout<<"Luogu";
else
cout<<"Local";
return 0;
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int ch=0;
ch=(5-3)*n;
if(ch>11){
System.out.println("Luogu");
}else{
System.out.println("Local");
}
scanner.close();
}
}
P5714 肥胖问题
#include<iostream>
using namespace std;
double w,h,bim;
int main()
{
cin>>w>>h;
bim=w/(h*h);
if(bim<18.5)
cout<<"Underweight"<<endl;
else if(bim>=18.5 && bim<24)
cout<<"Normal";
else if(bim>24)
cout<<bim<<endl<<"Overweight"<<endl;
return 0;
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double w=scanner.nextDouble();
double h=scanner.nextDouble();
double bim=w/(h*h);
if(bim<18.5){
System.out.println("Underweight");
}else if(bim>=18.5 && bim<24){
System.out.println("Normal");
}else if(bim>24){
System.out.println(String.format("%.6g", bim)+"\n"+"Overweight");
}
scanner.close();
}
}
P5715 三位数排序
你看,这种可以完全用顺序结构做的题目却又放到分支结构里头了。使用数组加sort()函数,别说是三位数排序了,就算是一百位数排序都可以。
c++里头可以使用万能头文件<bits/stdc++.h>代替头文件<algorithm>,sort的用法为:sort(数组名+起始位置,数组名+终点位置,cmp),其中cmp是自定义排列顺序,需要自己写,如果不写,就是默认从小到大排,比如我要求他从大到小排,就可以这样写:
void cmp(int a,int b)
{
return a>b;
}
java里头需要引用Arrays类,array的意思就是数组,其用法和c++没有太大的区别,如果直接写sort(数组名),就可以直接从小到大排。
#include<bits/stdc++.h>
using namespace std;
int a[4];
int main()
{
cin>>a[0]>>a[1]>>a[2];
sort(a+0,a+2+1);
cout<<a[0]<<" "<<a[1]<<" "<<a[2];
return 0;
}
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int[] a=new int[3];
a[0]=scanner.nextInt();
a[1]=scanner.nextInt();
a[2]=scanner.nextInt();
Arrays.sort(a);
System.out.println(a[0]+" "+a[1]+" "+a[2]);
scanner.close();
}
}
P5716 月份天数
这道题其实就是想要你用switch(),不是Nintendo Switch,是一种分支结构的写法,其语法如下:
switch(表达式)
{
case 常量表达式1: 语句组1;break;
//……
case 常量表达式n: 语句组n;break;
[default : 语句组n+1]
}
case,即实例,default,即违约,其意思就是,如果是这个情况就这么做,如果是那个情况就那么做,如果没有一个情况符合,那么就怎么怎么样做。
需要注意的是,case语句里面必须包含break,否则当执行完case语句后,后面所有的语句都会被执行。
#include<iostream>
using namespace std;
int y,m;
bool isr(int y)
{
if(y%4==0 && y%100!=0)
return 1;
else if(y%400==0)
return 1;
return 0;
}
int main()
{
cin>>y>>m;
switch(m)
{
case 1:cout<<31<<endl; break;
case 2:
{
if(isr(y))
cout<<29<<endl;
else
cout<<28<<endl;
break;
}
case 3:cout<<31<<endl; break;
case 4:cout<<30<<endl; break;
case 5:cout<<31<<endl; break;
case 6:cout<<30<<endl; break;
case 7:cout<<31<<endl; break;
case 8:cout<<31<<endl; break;
case 9:cout<<30<<endl; break;
case 10:cout<<31<<endl; break;
case 11:cout<<30<<endl; break;
case 12:cout<<31<<endl; break;
}
return 0;
}
import java.util.Scanner;
public class Main{
static int y,m;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
y=in.nextInt();
m=in.nextInt();
switch (m) {
case 1:
System.out.println("31");
break;
case 2:
{
if(isr(y)){
System.out.println("29");
break;
}else{
System.out.println("28");
break;
}
}
case 3:
System.out.println("31");
break;
case 4:
System.out.println("30");
break;
case 5:
System.out.println("31");
break;
case 6:
System.out.println("30");
break;
case 7:
System.out.println("31");
break;
case 8:
System.out.println("31");
break;
case 9:
System.out.println("30");
break;
case 10:
System.out.println("31");
break;
case 11:
System.out.println("30");
break;
case 12:
System.out.println("31");
break;
}
in.close();
}
public static boolean isr(int year){
if(year%4==0 && year%100!=0){
return true;
}else if(year%400==0){
return true;
}else{
return false;
}
}
}
大家可以对比一下小学数学N合一的代码中连续if和本题中switch的使用,看看那种更趁手。
P1085 不高兴的津津
我觉得这题的描述有点小问题,如果是兴趣班的话,应该不会不高兴,比如我,如果我去上编程兴趣班,我绝对会很高兴,但如果要我去上oi补习班,那我也肯定不高兴:(
这题使用擂台法,即每个数据当前选出的最大/最小数据进行比较,大而更大,小而更小,需要注意,最大值的初始设定应该尽量小,最小值的初始设定应该尽量大。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main ()
{
int a,b,s,max=0,i,day=0;
for (i=1;i<8;i++)
{
cin>>a>>b;
s=a+b;
if ((s>max)&&(s>8)) max=s,day=i;
}
cout<<day;
return 0;
}
import java.util.Scanner;
public class Main{
static int a,b,maxn,maxday;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
for(int i=1;i<=7;i++){
a=in.nextInt();
b=in.nextInt();
if((a+b)>maxn){
maxn=a+b;
maxday=i;
}
}
if(maxn>=8){
System.out.println(maxday);
}else{
System.out.println("0");
}
in.close();
}
}0;
}
我无法理解一个东西,那就是:
有没有那位大佬来解释一下,为什么我的java程序是绿色的100为配红色的Unaccepted
P1909 买铅笔
本题使用三目运算会比价划算,可以省掉一个if_else,你问题什么事三目运算?推荐食用洛谷刷题计划1P5707上学迟到:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,a,b,nm,ym=999999999;
cin>>n;
for(int i=1;i<=3;i++)
{
cin>>a;
cin>>b;
nm=(n/a+(n%a!=0))*b;
if(nm<ym)
ym=nm;
}
cout<<ym;
return 0;
}
import java.util.Scanner;
public class Main{
public static long n,a,b,nm,ym=99999;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextLong();
for(int i=1;i<=3;i++){
a=in.nextLong();
b=in.nextLong();
nm=n%a==0?n/a:n/a+1;
ym=Math.min(nm*b, ym);
}
System.out.println(ym);
in.close();
}
}
P5717 三角形分类
本题题末的补充说明应该可以弥补你那匮乏的数学知识,首先对输入的三个数据进行从小到大排序,由于java没有swap()函数,所以采用中间值法进行交换,当然你也可以用三位数排序那题的数组方法进行排序,那也是没有问题的。
由于我的程序是从c++转译的java,所以我尝试使用System.exit(0)来实现结束进程,但很遗憾,这会导致测评机RE,所以只能用连续if了:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
//寻找最大值,使其成为d
if(a>c)
swap(a,c);
if(b>c)
swap(b,c);
if(a>c)
swap(a,c);
if(b>c)
swap(b,c);
if(a+b<=c)
{
cout<<"Not triangle";
return 0;
}
if(pow(a,2)+pow(b,2)==pow(c,2))
cout<<"Right triangle"<<endl;
if(pow(a,2)+pow(b,2)>pow(c,2))
cout<<"Acute triangle"<<endl;
if(pow(a,2)+pow(b,2)<pow(c,2))
cout<<"Obtuse triangle"<<endl;
if(a==b||a==c||b==c)
cout<<"Isosceles triangle"<<endl;
if(a==b&&b==c)
cout<<"Equilateral triangle"<<endl;
return 0;
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
int c=in.nextInt();
if(a>c){
int d=a;
a=c;
c=d;
}
if(b>c){
int d=b;
b=c;
c=d;
}
if(a>c){
int d=a;
a=c;
c=d;
}
if(b>c){
int d=b;
b=c;
c=d;
}
//System.out.println(a+" "+b+" "+c);
if(a+b<=c){
System.out.println("Not triangle");
//System.exit(1); //强制结束进程
}
if(Math.pow(a,2)+Math.pow(b,2)==Math.pow(c,2)){
System.out.println("Right triangle");
}
if(Math.pow(a,2)+Math.pow(b,2)>Math.pow(c,2)){
System.out.println("Acute triangle");
}
if(Math.pow(a,2)+Math.pow(b,2)<Math.pow(c,2)){
System.out.println("Obtuse triangle");
}
if(a==b || a==c || b==c){
System.out.println("Isosceles triangle");
}
if(a==b && b==c){
System.out.println("Equilateral triangle");
}
in.close();
//System.exit(1);
}
}
另外,建议直接复制样例输出,以免自己打字打错,得不偿失。
P1422 小玉家的电费
保留一位小数?使用setprecision还是String.format()?都可以不用。由于乘的都是浮点数,所以定义变量肯定是用float和double,如果你用上述方法肯定是可行的,这里提一种小寄巧:当你把一个浮点数转成整数时,相当于对其取整数位,如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
float a;
cin>>a;
cout<<int(a);
return 0;
}
/*
input:3.14
output:3
*/
但如果你把数据a乘个10再转成int,然后再除一个10.0,那么数据a就会保留一位小数:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
float a;
cin>>a;
cout<<int(a*10)/10.0;
return 0;
}
/*
input:3.14
output:3.1
*/
此方法对float和double都有效,但如果你直接定义一个int类型的变量进行这个操作,就没有效果了:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
float a;
double b;
cin>>a;
if(a<=150)
{
if(a==0)
{
cout<<"0.0";
return 0;
}
else
b=a*0.4463;
}
else
{
if(a>150&&a<=400)
b=150*0.4463+(a-150)*0.4663;
else
b=150*0.4463+250*0.4663+(a-400)*0.5663;
}
b=int(b*10+0.5)/10.0;
cout<<b;
return 0;
}
import java.util.Scanner;
public class Main{
static double b;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
float a=in.nextFloat();
if(a<=150){
if(a==0){
System.out.println("0.0");
}else{
b=a*0.4463;
}
}else{
if(a>150 && a<=400){
b=150*0.4463+(a-150)*0.4663;
}else{
b=150*0.4463+250*0.4663+(a-400)*0.5663;
}
}
b=(int)(b*10+0.5)/10.0;
System.out.println(b);
in.close();
}
}
P1424 小鱼的航程(改进版)
浅显易懂的模拟:
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,ans=0;
int main()
{
int x;
cin>>x>>n;
for(int i=0;i<n;i++)
{
if((x!=6)&&(x!=7))
ans += 250;
if(x==7)
x=1;
else
x++;
}
cout<<ans;
return 0;
}
import java.util.Scanner;
public class Main{
static long n,ans;
static int x;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
x=in.nextInt();
n=in.nextLong();
for(int i=0;i<n;i++){
if((x!=6) && (x!=7)){
ans+=250;
}
if(x==7){
x=1;
}else{
x++;
}
}
System.out.println(ans);
in.close();
}
}
P1888 三角函数
正弦,即sin,具体到直角三角形里头,就是对边和邻边的比值,同样还是先排序找出斜边和最小边,再计算,这个输入也可以用三位数排序的方法来做。由于题目要求要约分,所以要求最小公约数和最大公约数,这个函数一般写作gcd(),无论是c++还是java都没有这个函数,得自己写:
#include<iostream>
using namespace std;
long long maxn,minn; //分别为斜边以及最短边
long long gcd(long long a,long long b)
{
int aa=a,bb=b;
while(aa!=bb)
{
if(aa>bb)
{
aa=aa-bb;
}
else
{
bb=bb-aa;
}
}
return a/aa;
}
int main()
{
long long a,b,c; //由于数据出了int范围,所以用long long
cin>>a>>b>>c;
minn=a; //假设a为最小数
if(b<minn)
minn=b; //一旦小于最小数,就替换
if(c<minn)
minn=c; //同上
maxn=a; //道理同上,只是改为了最大数判断
if(b>maxn)
maxn=b;
if(c>maxn)
maxn=c;
cout<<gcd(minn,maxn)<<"/"<<gcd(maxn,minn);
return 0;
}
import java.util.Scanner;
public class Main{
static long maxn,minn;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
long a=in.nextLong();
long b=in.nextLong();
long c=in.nextLong();
minn=a;
if(b<minn){
minn=b;
}
if(c<minn){
minn=c;
}
maxn=a;
if(b>maxn){
maxn=b;
}
if(c>maxn){
maxn=c;
}
System.out.println(gcd(minn,maxn)+"/"+gcd(maxn,minn));
}
public static long gcd(long a,long b){
long aa=a,bb=b;
while(aa!=bb){
if(aa>bb){
aa=aa-bb;
}else{
bb=bb-aa;
}
}
return a/aa;
}
}
至于gcd的运行方式,大家自己手算模拟一下大抵就知道了。
P1046 淘淘摘苹果
边输入边判断,或者遍历数组都是可行的方法:
#include<iostream>
using namespace std;
const int sit=30;
int a[11],h,sum;
int main()
{
for(int i=1;i<=10;i++)
cin>>a[i];
cin>>h;
for(int i=1;i<=10;i++)
if(h+sit>=a[i])
sum++;
cout<<sum;
return 0;
}
import java.util.Scanner;
public class Main{
public static final int sit=30;
static int[] a=new int[11];
static int h,sum;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
for(int i=1;i<=10;i++){
a[i]=in.nextInt();
}
h=in.nextInt();
for(int i=1;i<=10;i++){
if(h+sit>=a[i])
sum++;
}
System.out.println(sum);
in.close();
}
}
P4414 ABC
首先澄清一下,克罗地亚有自己的语言克罗地亚语,英语在当地不是官话,这应该是由克罗地亚语翻译成英语再翻译成中文的,所以有一股谷歌翻译的味(并非贬低本题翻译君),而是I'm a fan of Croatia!
回归正题,这题的意思就是说按照字典序排,这个字典序,就是大写字母在26字母表中的位置。做题顺序大概是这样的:首先将输入的数字数据按照从小到大排列,然后依次取出字母顺序的数字,输出即可,由于固定只有三个数据,所以还是比较好写的:
#include<bits/stdc++.h>
using namespace std;
int a,b,c,num[4];
int main()
{
for(int i=1;i<=3;i++)
cin>>num[i];
sort(num+1,num+3+1);
a=num[1],b=num[2],c=num[3];
string ABC;
cin>>ABC;
for(int i=0;i<3;i++)
{
if(ABC[i]=='A')
cout<<a<<" ";
else if(ABC[i]=='B')
cout<<b<<" ";
else if(ABC[i]=='C')
cout<<c<<" ";
}
return 0;
}
但是实在让我费解的是把这个c++程序翻译成java就可以听取WA声一片,这样的情况也不是少数了,不是RE就是WA:
import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int a,b,c;
static int[] num=new int[5];
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
for(int i=0;i<3;i++){
num[i]=in.nextInt();
}
Arrays.sort(num);
a=num[0];b=num[1];c=num[2];
String ABC=in.next();
for(int i=0;i<3;i++){
switch (ABC.charAt(i)){
case 'A':
System.out.print(a+" ");
break;
case 'B':
System.out.print(b+" ");
break;
case 'C':
System.out.print(c+" ");
break;
}
}
in.close();
}
}
如果有大佬路过,还请在评论区指教指教,下面是AC代码:
import java.util.Scanner;
public class Main{
static int a,b,c;
static String ABC;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
a=in.nextInt();
b=in.nextInt();
c=in.nextInt();
int maxn=Math.max(a,Math.max(b,c));
int minn=Math.min(a,Math.min(b,c));
int mid=a+b+c-maxn-minn;
ABC=in.next();
for(int i=0;i<3;i++){
switch (ABC.charAt(i)) {
case 'A':
System.out.print(minn+" ");
break;
case 'B':
System.out.print(mid+" ");
break;
case 'C':
System.out.print(maxn+" ");
break;
}
}
in.close();
}
}
P1055 ISBN号码
一道简单的大模拟,貌似没有什么需要太注意的地方,要说的话就是java里头的String类型字符串是只能输入一次不能修改的,所以建议输入字符串转为char组,但你要是说完全不能用字符串做就有点过了,但那就不是简单的String类了:
#include<iostream>
using namespace std;
int a[13];
char s[13];
int x;
int main()
{
for(int i=0;i<13;i++)
{
cin>>s[i];
}
for(int i=0;i<13;i++)
{
if(i==1 || i==5||i==11)
continue;
a[i]=s[i]-'0';
}
int m=1;
for(int i=0;i<13;i++)
{
if(i==1 || i==5||i==11 || i==12)
continue;
x=a[i]*m+x;
m++;
}
x=x%11;
if(x==10 && s[12]=='X')
{
cout<<"Right";
return 0;
}
else
{
if(x<10 && a[12]==x)
{
cout<<"Right";
return 0;
}
if(x==10 && s[12]!='X')
{
for(int i=0;i<11;i++)
cout<<s[i];
cout<<"-X";
}
else
{
for(int i=0;i<11;i++)
cout<<s[i];
cout<<"-"<<x;
}
}
return 0;
}
import java.util.Scanner;
public class Main{
static int[] a=new int[13];
static char[] s=new char[13];
static int x;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String s1=in.nextLine();
for(int i=0;i<s1.length();i++){
s[i]=s1.charAt(i);
}
for(int i=0;i<13;i++){
if(i==1 | i==5 | i==11)
continue;
a[i]=s[i]-'0';
}
int m=1;
for(int i=0;i<13;i++){
if(i==1 | i==5 | i==11 | i==12)
continue;
x=a[i]*m+x;
m++;
}
x%=11;
if(x==10 && s[12]=='X'){
System.out.print("Right");
}else{
if(x<10 && a[12]==x){
System.out.print("Right");
}else if(x==10 && s[12]!='X'){
for(int i=0;i<11;i++)
System.out.print(s[i]);
System.out.print("-X");
}else{
for(int i=0;i<11;i++)
System.out.print(s[i]);
System.out.print("-"+x);
}
}
in.close();
}
}