洛谷刷题计划2

本篇博客包含分支结构内得所有题目的题解

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^2+100x-2400=0,解得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();
    }
}

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值