蓝桥杯练习题

时间:2023-02-14 13:11:59

1、 核桃的数量

问题描述:

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

  1. 各组的核桃数量必须相同

  2. 各组内必须能平分核桃(当然是不能打碎的)

  3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)

输入格式 :输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30)

输出格式:输出一个正整数,表示每袋核桃的数量。

样例输入:1 2 4 5
样例输出:1 20
样例输入:2 3 1 1
样例输出2 3

import java.util.Scanner;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
int c=in.nextInt();
System.out.println(f(a,f(b,c)));
}
public static int f(int x,int y){
int n=Math.max(x,y);
int m=Math.min(x,y);
int p=n;
while(p%m!=0)
p=p+n;
return p;
}
}

2、最大乘积

问题描述
  对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
  第一行一个数表示数据组数
  每组输入数据共2行:
  第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
  第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
  每组数据输出1行,为最大的乘积。
样例输入
1
5 5
1 2 3 4 2
样例输出
48

import java.util.Scanner;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int x=in.nextInt();
while(x-->0){
int n=in.nextInt();
int m=in.nextInt();
int arr[]=new int[n];
for(int i=0;i<arr.length;i++)
arr[i]=in.nextInt();
sort(arr);
f(arr,n,m);
}

}
public static void f(int arr[],int n,int m){
int sum=1;
int s1=1;
int s2=1;
if(n==1&&m==1)
System.out.println(arr[0]);
else {for(int i=0,j=n-1;j>i&&m!=0;j--){
s1=arr[i]*arr[i+1];
s2=arr[j]*arr[j-1];
if(s1<=s2){
sum=sum*arr[j];
m--;
}
if(s1>s2&&m>=2){
sum=sum*s1;
j++;
i=i+2;
m=m-2;
}
}
System.out.println(sum);
}
}

public static void sort(int arr[]){
for(int i=0;i<arr.length-1;i++)
for(int j=i+1;j<arr.length;j++)
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}

3、第二大整数

问题描述
  编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束。然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来。说明:(1)0表示输入结束,它本身并不计入这组整数中。(2)在这组整数中,既有正数,也可能有负数。(3)这组整数的个数不少于2个。
  输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0。
  输出格式:输出第二大的那个整数。
  输入输出样例
样例输入
5 8 -12 7 0
样例输出
7

import java.util.Arrays;
import java.util.Scanner;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int arr[]=new int[20];
int pos=0;
for(int i=0;i<arr.length;i++){
arr[i]=in.nextInt();
pos++;
if(arr[i]==0)
break;
}
sort(arr,pos-1);
System.out.print(arr[1]);
}
public static void sort(int arr[],int pos){
for(int i=0;i<pos-1;i++){
for(int j=i+1;j<pos;j++)
if(arr[i]<arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}

}
}

4、逆序排列

问题描述
  编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中。当用户输入0时,表示输入结束。然后程序将把这个数组中的值按逆序重新存放,并打印出来。例如:假设用户输入了一组数据:7 19 -5 6 2 0,那么程序将会把前五个有效数据保存在一个数组中,即7 19 -5 6 2,然后把这个数组中的值按逆序重新存放,即变成了2 6 -5 19 7,然后把它们打印出来。
  输入格式:输入只有一行,由若干个整数组成,中间用空格隔开,最末尾的整数为0。
  输出格式:输出也只有一行,即逆序排列后的整数,中间用空格隔开,末尾没有空格。
  输入输出样例
样例输入
7 19 -5 6 2 0
样例输出
2 6 -5 19 7

import java.util.Scanner;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int arr[]=new int[20];
int pos=0;
for(int i=0;i<arr.length;i++){
arr[i]=in.nextInt();
pos++;
if(arr[i]==0)
break;
}
for(int i=pos-2;i>=0;i--)
System.out.print(arr[i]+" ");

}
}

5、寻找数组中最大值

问题描述
  对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
  整数数组a[],数组元素个数小于1等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
  输出最大值,及其下标
样例输入
3
3 2 1

样例输出

3 0

import java.util.Scanner;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in= new Scanner(System.in);
int n=in.nextInt();
int arr[]=new int [n];
for(int i=0;i<arr.length;i++){
arr[i]=in.nextInt();
}
int max=0;
for(int i=0;i<arr.length;i++){
if(max<arr[i])
max=arr[i];
}
for(int i=0;i<arr.length;i++)
if(max==arr[i])
System.out.println(max+" "+i);
}
}

6、回文数

问题描述
  1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
  按从小到大的顺序输出满足条件的四位十进制数。

public class Main{

public static void main(String[] args) {
for(int i=1000;i<10000;i++){
String str=i+"";
char[] arr=str.toCharArray();
if((arr[0]==arr[3])&&(arr[1]==arr[2]))
System.out.println(i);
}
}
}

7、图形显示

问题描述
  编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):
  * * * * *
  * * * *
  * * *
  * *
  *

import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for(int i=0;i<=n;i++){
for(int j=0;j<n-i;j++)
System.out.print("*"+" ");
System.out.print("\n");
}
}
}

8、Anagrams问题

问题描述
  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例
样例输入
Unclear
Nuclear
样例输出
Y

import java.util.*;
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
String a=in.next().toUpperCase();
String b=in.next().toUpperCase();
if(count(a).equals(count(b)))
System.out.println("Y");
else
System.out.println("N");

}
public static String count(String x){
char ch[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int arr[]=new int[26];
for(int i=0;i<x.length();i++){
for(int j=0;j<ch.length;j++)
if(x.charAt(i)==ch[j])
arr[j]++;
}
return Arrays.toString(arr);
}

}

9、排序

问题描述
  编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。
  输入格式:输入只有一行,即三个整数,中间用空格隔开。
  输出格式:输出只有一行,即排序后的结果。
  输入输出样例
样例输入
9 2 30
样例输出
30 9 2

import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int arr[]=new int[3];
for(int i=0;i<arr.length;i++)
arr[i]=in.nextInt();
sort(arr);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
public static void sort(int[] a){
for(int i=0;i<a.length-1;i++)
for(int j=i+1;j<a.length;j++)
if(a[i]<a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}

10、删除数组零元素

从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。
样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)
5
3 4 0 0 2
样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)
3
3 4 2
样例输入:
7
0 0 7 0 0 9 0
样例输出:
2
7 9
样例输入:
3
0 0 0
样例输出:
0

import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int arr[]=new int[n];
for(int i=0;i<arr.length;i++)
arr[i]=in.nextInt();
int num=CompactIntagers(arr,n);
System.out.println(num);
for(int i=0;i<num;i++)
System.out.print(arr[i]+" ");
}
public static int CompactIntagers(int a[],int x){
int m=0;
for(int i=0;i<a.length-m;){
if(a[i]==0){
for(int j=i;j<x-m-1;j++)
a[j]=a[j+1];
m++;
}else i++;
}
return x-m;
}
}

11、动态数组使用

从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。
样例输入:
5
3 4 0 0 2
样例输出:
9 1
样例输入:
7
3 2 7 5 2 9 1
样例输出:
29 4

import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int arr[]=new int[n];
for(int i=0;i<arr.length;i++)
arr[i]=in.nextInt();
f(arr);
}
public static void f(int[] a){
int sum=0;
for(int i=0;i<a.length;i++)
sum=sum+a[i];
int avg=sum/a.length;
print(sum);
print(avg);
}
public static void print(int x){
System.out.print(x+" ");
}

}

12、大小写转换

问题描述
  编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。
  输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
  输出格式:输出经过转换后的字符串。
输入输出样例
样例输入
AeDb
样例输出
aEdB

import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
String str=in.next();
String[] arr=new String[str.length()];
for(int i=0;i<str.length();i++){
if(str.charAt(i)>='a'&&str.charAt(i)<='z')
arr[i]=(String.valueOf(str.charAt(i))).toUpperCase();
if(str.charAt(i)>='A'&&str.charAt(i)<='Z')
arr[i]=(String.valueOf(str.charAt(i))).toLowerCase();
}
for(int i=0;i<str.length();i++)
System.out.print(arr[i]);
}
}

13、特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for(int i=10000;i<1000000;i++){
String str=i+"";
char[] arr=str.toCharArray();
if(isHuiWen(arr)){
if(n==arrSum(arr))
sop(i);
}
}
}
public static boolean isHuiWen(char[] a){
if(a[0]==a[a.length-1]&&a[1]==a[a.length-2]&&a[2]==a[a.length-3]){
return true;
}
return false;
}
public static void sop(Object obj){
System.out.println(obj);
}
public static int arrSum(char[] a1){
int sum=0;
for(int i=0;i<a1.length;i++){
sum=sum+(a1[i]-48);
}
return sum;
}
}

14、杨辉三角

问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
  
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
  
下面给出了杨辉三角形的前4行:  
1
1 1
1 2 1  
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。

import java.util.*;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[][] arr=new int[n][n];
arr[0][0]=1;
for(int i=1;i<n;i++){
arr[i][0]=1;
arr[i][i]=1;
for(int j=1;j<i;j++){
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}

15、数列特征

问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000

import java.util.*;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] arr=new int[n];
int sum=0;
for(int i=0;i<arr.length;i++){
arr[i]=in.nextInt();
sum=sum+arr[i];
}
sop(max(arr));
sop(min(arr));
sop(sum);
}
public static int min(int[] a){
int min=a[0];
for(int i=1;i<a.length;i++){
if(min>a[i])
min=a[i];
}
return min;
}
public static int max(int[] a){
int max=a[0];
for(int i=1;i<a.length;i++){
if(max<a[i])
max=a[i];
}
return max;
}
public static void sop(int a){
System.out.println(a);
}
}

16、闰年判断

问题描述
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
输入格式
输入包含一个整数y,表示当前的年份。
输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
样例输入
2013
样例输出
no

import java.util.*;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
if(n%4==0&&n%100!=0||n%400==0)
System.out.println("yes");
else System.out.println("no");
}
}

17、01串

问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>

public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int a1=0;a1<2;a1++){
for(int a2=0;a2<2;a2++){
for(int a3=0;a3<2;a3++){
for(int a4=0;a4<2;a4++){
for(int a5=0;a5<2;a5++){
StringBuffer str=new StringBuffer();
System.out.println(str.append(a1).append(a2).append(a3).append(a4).append(a5));
}
}
}
}
}
}
}

18、矩阵乘法

问题描述
  输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
输入格式
  第一行,空格隔开的三个正整数m,s,n(均不超过200)。
  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
  m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
样例输出
-3 2
-8 2
提示
矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)(0,1,3) = 1 0 +0*1+(-1)*3=-3

import java.util.*;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int arr[]=new int[3];
for(int i=0;i<arr.length;i++)
arr[i]=in.nextInt();
int a1[][]=new int[arr[0]][arr[1]];
int a2[][]=new int[arr[1]][arr[2]];
int a3[][]=new int[arr[0]][arr[2]];
for(int i=0;i<arr[0];i++){
for(int j=0;j<arr[1];j++)
a1[i][j]=in.nextInt();
}
for(int i=0;i<arr[1];i++){
for(int j=0;j<arr[2];j++)
a2[i][j]=in.nextInt();
}
for(int i=0;i<arr[0];i++){

for(int k=0;k<arr[2];k++){
for(int j=0;j<arr[1];j++){
a3[i][k]=a3[i][k]+(a1[i][j]*a2[j][k]);
}
System.out.print(a3[i][k]+" ");
}
System.out.println();
}

}
}

19、粉糖果

问题描述
  有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
  每个小朋友都把自己的糖果分一半给左手边的孩子。
  一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
  反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
  你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
  程序首先读入一个整数N(在2和100之间),表示小朋友的人数。
  接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
  要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3
2 2 4
样例输出
4

import java.util.*;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int tang[]=new int[n];
for(int i=0;i<tang.length;i++)
tang[i]=in.nextInt();
int times=0;
while(isSame(tang)==false){
int m=tang[n-1];
for(int i=tang.length-1;i>0;i--){
tang[i]=tang[i]/2+tang[i-1]/2;
}
tang[0]=tang[0]/2+m/2;
for(int i=0;i<tang.length;i++)
if(tang[i]%2!=0){
tang[i]++;
times++;
}
}
System.out.println(times);
}
public static boolean isSame(int[] arr){
int n=0;
boolean b=false;
for(int i=0;i<arr.length-1;i++){
if(arr[i]==arr[i+1])
n++;
}
if(n==arr.length-1)
b=true;

return b;
}

}

20、字母图形

问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。

import java.util.*;
public class Main {

public static void main(String[] args) {
//TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int t=65;
char arr[][]=new char[n][m];
char ch[]=new char[m>n?m:n];
for(int i=0;i<ch.length;i++){
ch[i]=(char)t;
t++;
}
for(int i=0;i<n;i++){
for(int j=0;j<n-i&&i<m;j++){
arr[i+j][i]=ch[j];
}
for(int j=0;j<m-i;j++){
arr[i][i+j]=ch[j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
System.out.print(arr[i][j]);
System.out.println();
}
}
}

21、关联矩阵

问题描述
  有一个n个结点m条边的有向图,请输出他的关联矩阵。
输入格式
  第一行两个整数n、m,表示图中结点和边的数目。n<=100,m<=1000。
  接下来m行,每行两个整数a、b,表示图中有(a,b)边。
  注意图中可能含有重边,但不会有自环。
输出格式
  输出该图的关联矩阵,注意请勿改变边和结点的顺序。
样例输入
5 9
1 2
3 1
1 5
2 5
2 3
2 3
3 2
4 3
5 4
样例输出
1 -1 1 0 0 0 0 0 0
-1 0 0 1 1 1 -1 0 0
0 1 0 0 -1 -1 1 -1 0
0 0 0 0 0 0 0 1 -1
0 0 -1 -1 0 0 0 0 1

import java.util.*;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int frompoint=0;
int topoint=0;
int arr[][]=new int[n][m];
for(int i=0;i<m;i++){
frompoint=in.nextInt();
topoint=in.nextInt();
arr[frompoint-1][i]=1;
arr[topoint-1][i]=-1;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
System.out.print(arr[i][j]+" ");
System.out.println();
}
}

}

22、

问题描述
  Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式
  仅包含一个正整数n,其中n<=100000。
输出格式
  输出一行,即前n个质数的乘积模50000的值。
样例输入
1
样例输出
2

import java.util.*;
public class Main {
public static void main(String[] args){
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int sum=1;
int count=0;
int i=2;
while(count<n){
if(isZS(i)){
sum=sum*i;
count++;
}
i++;
}
System.out.println(sum%50000);
}
public static boolean isZS(int x){
boolean a=true;
for(int j=2;j<x;j++){
if(x%j==0){
a=false;
break;
}
}
return a;
}
}

23、约数个数

输入一个正整数N (1
样例输入
12
样例输出
6
样例说明
  12的约数包括:1,2,3,4,6,12。共6个

import java.util.Scanner;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int count=0;
for(int i=1;i<=n;i++){
if(n%i==0)
count++;
}
System.out.println(count);
}
}

24、

编写一个程序,利用强制类型转换打印元音字母大小写10种形式的ASCII码。
  输出的顺序为:大写的字母A,E,I,O,U的ASCII码,小写的字母a,e,i,o,u的ASCII码。所有的ASCII码都用十进制表示.输出10行,每行一个ASCII码,最后输出一个空行。


public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
char[] arr={'A','E','I','O','U','a','e','i','o','u'};
int a[]=new int[10];
for(int i=0;i<arr.length;i++){
a[i]=arr[i];
System.out.println(a[i]);
}
System.out.println();
}

}

25、日期计算

问题描述
  已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
  输入只有一行
  YYYY MM DD
输出格式
  输出只有一行
  W
数据规模和约定
  1599 <= YYYY <= 2999
  1 <= MM <= 12
  1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
  1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5

import java.util.Scanner;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int year=in.nextInt();
int month=in.nextInt();
int date=in.nextInt();
int result[]={4,5,6,7,1,2,3};
int s=sum(year)+sum1(year,month)+date;
System.out.println(result[s%7]);
}
public static int sum(int a){
int sum=0;
for(int i=1599;i<a;i++){
if(i%4==0&&i%100!=0||i%400==0)
sum=sum+366;
else sum=sum+365;
}
return sum;
}
public static int sum1(int a,int b){
int sum1=0;
int arr[]={31,28,31,30,31,30,31,31,30,31,30,31};
int arr1[]={31,29,31,30,31,30,31,31,30,31,30,31};
if(a%4==0&&a%100!=0||a%400==0)
for(int i=0;i<b-1;i++)
sum1=sum1+arr1[i];
else for(int i=0;i<b-1;i++)
sum1=sum1+arr[i];
return sum1;
}
}

26、错误的票据

问题描述
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。
因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
输入格式
要求程序首先输入一个整数N(N<100)表示后面数据行数。
接着读入N行数据。
每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。
每个整数代表一个ID号。
输出格式
要求程序输出1行,含两个整数m n,用空格分隔。
其中,m表示断号ID,n表示重号ID
样例输入1
2
5 6 8 11 9
10 12 9
样例输出1
7 9
样例输入2
6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
172 189 127 107 112 192 103 131 133 169 158
128 102 110 148 139 157 140 195 197
185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
样例输出2
105 120

import java.util.Scanner;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt();
String s[]=new String[n+1];
for(int i=0;i<s.length;i++)
s[i]=in.nextLine();
String str="";
for(int i=0;i<s.length;i++)
str=str+s[i].trim()+" ";
str = str.trim();
String[] ss=str.split(" ");
int arr[]=new int[ss.length];
for(int i=0;i<ss.length;i++)
arr[i]=Integer.parseInt(ss[i]);
sort(arr);
compare(arr);
}
public static int[] sort(int arr[]){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
public static void compare(int arr[]){
int a[]=new int[arr.length];
for(int i=0;i<arr.length;i++)
for(int j=arr[0];j<=arr[arr.length-1];j++)
if(arr[i]==j)
a[j-arr[0]]++;
for(int i=0;i<a.length;i++){
if(a[i]==0)
System.out.print(i+arr[0]+" ");
if(a[i]==2)
System.out.print(i+arr[0]);
}
}
}

27、操作格子

问题描述
有n个格子,从左到右放成一排,编号为1-n。
共有m次操作,有3种操作类型:
1.修改一个格子的权值,
2.求连续一段格子权值和。
3.求连续一段格子的最大值。
对于每个2、3操作输出你所求出的结果。
输入格式
第一行2个整数n,m。
接下来一行n个整数表示n个格子的初始权值。
接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。
输出格式
有若干行,行数等于p=2或3的操作总数。
每行1个整数,对应了每个p=2或3操作的结果。
样例输入
4 3
1 2 3 4
2 1 3
1 4 3
3 1 4
样例输出
6
3

import java.util.Scanner;
public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
@SuppressWarnings("resource")
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int a1[]=new int[n];
for(int i=0;i<a1.length;i++)
a1[i]=in.nextInt();
int arr[][]=new int[m][3];
for(int i=0;i<m;i++){
for(int j=0;j<3;j++){
arr[i][j]=in.nextInt();
}
}
for(int i=0;i<m;i++){
if(arr[i][0]==1)
r1(arr,a1,i);
if(arr[i][0]==2)
sop(r2(arr,a1,i));
if(arr[i][0]==3)
sop(r3(arr,a1,i));
}

}
public static void r1(int arr[][],int a1[],int i){
a1[arr[i][1]-1]=arr[i][2];
}
public static int r2(int arr[][],int a1[],int i){
int sum=0;
for(int j=arr[i][1]-1;j<arr[i][2];j++)
sum=sum+a1[j];
return sum;
}
public static int r3(int arr[][],int a1[],int i){
int max=0;
for(int j=arr[i][1]-1;j<arr[i][2];j++){
if(max<a1[j])
max=a1[j];
}
return max;
}
public static void sop(int x){
System.out.println(x);
}
}