ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第十二周

2021-05-24 00:01:17  阅读:253  来源: 互联网

标签:第十二 Scanner int nextInt sc XP public


课后练习题

A、XP的素数

题目描述

  • XP最近对素数很痴迷,特别是那些特殊的素数,其中有一类素数被称为孪生素数。其定义如下:如果一个数k是素数,k+2也是素数,那么k和k+2成为一对孪生素数。请计算一个给定区间m和n(0<m<n)中孪生素数对的个数。

输入

  • 单组输入数据 m n (0<m<n<1000)

输出

  • 请输出一行结果:区间[m,n]中孪生素数对的个数

样例输入 Copy

1 999

样例输出 Copy

35

链接:XP的素数

代码

import java.util.Scanner;

public class Main {
	public static int prime(int n){
		
		if(n==1)
			return 0;  //1不是素数,返回0
		for(int i=2;i<n;i++){
			if(n%i==0)
				return 0;
			continue;
		}
			
		return 1;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int m = sc.nextInt();
			int n = sc.nextInt();
			int sum = 0;
			
			for(int i = m;i<=n-2;i++)
				if(prime(i)==1&&prime(i+2)==1)
					sum++;
			System.out.println(sum);
		}

	}

}

B、XP的点滴

题目描述

  • XP一不留神感冒了,于是跑到校医院打点滴。打点滴真是无聊啊,他看到盐水一滴一滴地滴下来,突然想到一个问题:如果盐水有规律地滴下,先滴一滴,停一下;然后滴二滴,停一下;再滴三滴,停一下…,假设这瓶盐水一共有n毫升,每一滴是y毫升,每一滴需要的时间是一秒(假设最后一滴不到y毫升,需花费的时间也算一秒),停一下的时间也是一秒。请问XP多久能挂完这瓶盐水呢?

输入

  • 单组输入数据 n y (0<n,y<=1000)

输出

  • 输出一行结果

样例输入 Copy

10 1

样例输出 Copy

13

链接:XP的点滴

代码

import java.util.Scanner;

public class Main {
	public static int count(int []c,int n,int y){
		int temp = 0;//记录每次滴落的滴数
		for(int i=0;i<c.length;i++)//i代表中间间隔几次
			c[i] = i+1;
		int sum = 0;//总量的滴数,几滴就几秒
		double x = n/(y*1.0);
		if(x>n/y)
			sum = n/y+1;
		else
			sum = n/y;
		int j = 0;
		for(int i=0;i<c.length;i++)
			if(n>0){
				n-=c[i]*y;//记录间断次数
				j = i;
			}
		temp = j+sum;
		
		return temp;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int n = sc.nextInt();
			int y = sc.nextInt();
			int []c = new int[105];
			System.out.println(count(c,n,y));
		}
	}
}

C、今年暑假不AC

题目描述

  • “今年暑假不AC?”
  • “是的。”
  • “那你干什么呢?”
  • “看世界杯呀,笨蛋!”
  • “@#$%^&*%…”

确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)

输入

  • 输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e
    (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。

输出

  • 对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。

样例输入 Copy

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0

样例输出 Copy

5

链接:今年暑假不AC

代码

import java.util.Scanner;

public class Main {
	
	public static void swap(int[][] a,int j){
		int temp = a[j][1];
		a[j][1] = a[j+1][1];
		a[j+1][1] = temp;
		
		temp = a[j][0];
		a[j][0] = a[j+1][0];
		a[j+1][0] = temp;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int n = sc.nextInt();
			if(n<=0)
				break;
			
			int [][]a = new int[n][2];
			for(int i=0;i<n;i++){
				a[i][0] = sc.nextInt();
				a[i][1] = sc.nextInt();
			}
			
			for(int i=0;i<n-1;i++)
				for(int j=0;j<n-1-i;j++)
					if(a[j][1]>a[j+1][1])
						swap(a,j);
			
			int count = 1;
			int num = a[0][1];
			for(int i=1;i<n;i++)
				if(a[i][0]>=num){
					num = a[i][1];
					count++;
				}
			System.out.println(count);
		}
	}
}

D、最优装载

题目描述

  • 使用贪心算法求解最优装载问题。

输入

  • 每组输入包括两部分, 第一行包括集装箱个数n,以及船的装载量C。 接下来n行每行则输入集装箱编号以及其重量。

输出

  • 输出包括两行,第一行为最多可装载的集装箱数量 。 第二行则为最优装载方案对应的所有集装箱编号(按照装载次序输出,用空格隔开) 。

样例输入 Copy

5 10
1 1
2 2
3 3
4 4
5 5

样例输出 Copy

4
1 2 3 4

代码

链接:最优装载

import java.util.Scanner;

public class Main {
	
	public static void swap(int[][] a,int j){
		int temp = a[j][1];
		a[j][1] = a[j+1][1];
		a[j+1][1] = temp;
		
		temp = a[j][0];
		a[j][0] = a[j+1][0];
		a[j+1][0] = temp;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int n = sc.nextInt();
			int c = sc.nextInt();
			if(n<=0)
				break;
			
			int [][]a = new int[n][2];
			for(int i=0;i<n;i++){
				a[i][0] = sc.nextInt();//编号
				a[i][1] = sc.nextInt();//重量
			}
			
			for(int i=0;i<n-1;i++)
				for(int j=0;j<n-1-i;j++)
					if(a[j][1]>a[j+1][1])
						swap(a,j);
			
			int count = 0;
			int x[] = new int[n];
			for(int i=0;i<n;i++)
				if(a[i][1]<=c){
					c-=a[i][1];
					count++;
					x[i] = a[i][0];
				}
			System.out.println(count);
			for(int i=0;i<count;i++)
				System.out.print(x[i]+" ");
			System.out.println();
		}
	}
}

E、XP的小视频

题目描述

  • XP的表哥为他推荐了一些学习计算机编程的小视频,这些视频的播放时间长短不完全相同。现在给定一段时间,你能告诉XP他最多可以看多少个视频吗?每个视频的播放时间和给定的总时间均用分钟为单位。

输入

  • 单组输入数据 第一行为m n ,m为给定时间长度(分钟)(0<n,m<=1000) ,n表示视频个数 ,接下来是n个整数代表每个视频的播放时间(每个视频播放时间为不超过1000的正整数)

输出

  • 输出一个整数代表XP最多可以看的视频数。

样例输入 Copy

84 6
65 46 18 76 79 3

样例输出 Copy

3

代码

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int m = sc.nextInt();//给定时间长度
			int n = sc.nextInt();//视频个数
			int a[] = new int[n];
			for(int i=0;i<n;i++)
				a[i] = sc.nextInt();
			Arrays.sort(a);//排序,按视频长度从小到大
			int count = 0;
			for (int i=0;i<n&&a[i]<=m;i++) {
	              m -= a[i];//更新总重量
	              ++count;
	        }
			System.out.println(count);
	   }
	}
}

F、最小生成树(Prim)

题目描述

  • 使用Prim算法求图的最小生成树(MST)

输入

  • 每组数据分为两个部分,第一部分为图的点数n,和边数m, 第二部分为m行,每一行输入三个数字,前两个为两个顶点的编号,第三个为边权重。

输出

  • 最小生成树,输出时按照边的两个端点的升序输出。(先看左端点,再看右端点,端点不换位置)

样例输入 Copy

3 3
0 1 10
0 2 15
1 2 50

样例输出 Copy

0 1 10
0 2 15

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN = 1010;
const int INF = 0x3f3f3f3f;

int n,m;
int G[MAXN][MAXN];
int g[MAXN][MAXN];
void init(){
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            G[i][j]=INF;
}

struct Edge{
    int lp;
    int rp;
    int len;
};

int cmp(const Edge &a,const Edge &b){
    if(a.lp==b.lp) return a.rp<b.rp;
    return a.lp<b.lp;
}

int main(){
    while(cin>>n>>m){
        Edge edges[m];
        init();
        int x,y,z,cnt=0;
        for(int i=0;i<m;i++){
            cin>>x>>y>>z;
            G[y][x]=z;
            G[x][y]=z;
            g[x][y]=z;
        }
        int closeset[MAXN],lowcost[MAXN],used[MAXN];
        for(int i=0;i<n;i++){//初始化
            lowcost[i]=G[0][i];
            closeset[i]=0;
            used[i]=0;            
        }
        used[0]=1;
        for(int i=1;i<n;i++){//每一次循环,找出一个到S最近的顶点
            int j=0;
            for(int k=0;k<n;k++){
                if((!used[k])&&(lowcost[k]<lowcost[j]))//k点不在S里面
                    j=k;
            }
            if(g[closeset[j]][j]==lowcost[j]){
                edges[cnt].lp=closeset[j];
                edges[cnt].rp=j;
                edges[cnt].len=lowcost[j];
            }
            else{
                edges[cnt].lp=j;
                edges[cnt].rp=closeset[j];
                edges[cnt].len=lowcost[j];
            }
            cnt++;
            used[j]=1;
            for(int k=0;k<n;k++){
                if((!used[k])&&(G[j][k]<lowcost[k])){
                    lowcost[k]=G[j][k];
                    closeset[k]=j;
                }
            }
        }
        sort(edges,edges+cnt,cmp);
        for(int k=0;k<cnt;k++){
            printf("%d %d %d\n",edges[k].lp,edges[k].rp,edges[k].len);
        }
    }
    return 0;
}

【今天下午吃了广东鱼粉,学校食堂的,不知道正不正宗,反正我挺喜欢的,嘿嘿~】
句子君:

“这是一个长满了百合花的峡谷。百合花静静地开放着,水边、坡上、岩石旁、大树下,到处都有。它们不疯不闹,也无鲜艳的颜色,仿佛它们开放着,也就是开放着,全无一点别的心思。峡谷上空的阳光是明亮的,甚至是强烈的,但因为峡谷太深,阳光仿佛要走过漫长的时间。因此,照进峡谷,照到这些百合花时,阳光已经变得柔和了,柔和得像薄薄的、轻盈得能飘动起来的雨幕。”
——曹文轩《根鸟》

标签:第十二,Scanner,int,nextInt,sc,XP,public
来源: https://blog.csdn.net/qq_45823118/article/details/117198242

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有