【做道题冷静一下】习题

目录

多项式加法

tic -tac - toe游戏

求最大公约数

求f(n)=1-1/1+1/2-1/3+.....+1/n

求f(n)=1+1/1+1/2+1/3+.....+1/n

凑硬币

输出前50个素数

输出100以内的素数

判断一个数是否是素数

念整数

素数和


                                                              


单词长度

题目内容:
你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it's”算一个单词,长度为4。注意,行中可能出现连续的空格。
输入格式:
输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
 

import java.util.Scanner;
public class Main{

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int loc=0;
		String result="";
		String str=in.nextLine().trim();
		if(str.endsWith(".")){
			do{ 
				loc=str.indexOf(' ');  //空格的位置
				if(loc!=-1){
					String subString=str.substring(0,loc); //截取的空格前的短串
					result+=subString.trim().length()+" ";  //长度
					str=str.substring(loc).trim();  //去掉短串后的剩余字符串
				}else if(str.endsWith(".")&&!str.startsWith(".")){
					result+=str.length()-1;
				}
				
			}while(loc!=-1);
		}
		 System.out.println(result.trim());

	}

}

 


                                                                  数组


多项式加法

题目内容:

一个多项式可以表达为x的各次幂与系数乘积的和,比如:

2x6+3x5+12x3+6x+20

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

程序要处理的幂最大为100。

输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:

每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。

注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。

从最高幂开始依次降到0幂,如:

2x6+3x5+12x3-6x+20

注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。

输入样例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20

输出样例:

4x6+6x5+12x3+12x2+12x+40

import java.util.Scanner;

/**
  写的有点啰嗦了,忙完最近再改。

 * 需要考虑: 正负号 
          0次幂,系数为0时
          系数为正负1时
          结果为0时
          1次幂时,幂上的1要省略
 * @author kylin
 *
 */
public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int[] numbers1=new int[101];
		int exponentiation; //幂
		int coefficient;  //系数
		do{
			exponentiation=in.nextInt();
			coefficient=in.nextInt();
			if(exponentiation<numbers1.length){
				numbers1[exponentiation]+=coefficient;
			}
		}while(exponentiation!=0);
		
		int[] numbers2=numbers1;
		do{
			exponentiation=in.nextInt();
			coefficient=in.nextInt();
			if(exponentiation<numbers2.length){
				numbers2[exponentiation]+=coefficient;
			}
		}while(exponentiation!=0);
	

		
		String result="";
		for(int i=numbers2.length-1;i>=0;i--){
			//幂大于1且系数不等于0时
			if(i>1&&numbers2[i]!=0){
				if("".equals(result)){
					//系数为1时
					if(numbers2[i]==1){
						result="x"+i;
					}else if(numbers2[i]==-1){ //系数为-1时
						result="-x"+i;
					}else{
						result=numbers2[i]+"x"+i;
					}
					
				}else if(numbers2[i]<0){
					if(numbers2[i]==-1){  //系数等于-1
						result+="-x"+i;
					}else{
						result+=numbers2[i]+"x"+i;
					}
					
				}else{
					if(numbers2[i]==1){
						result+="+x"+i;
					}else{
						result+="+"+numbers2[i]+"x"+i;
					}
				}
			}
			//幂等于1且系数不等于0时
			if(i==1&&numbers2[i]!=0){
				if("".equals(result)){  //前面为空时
					if(numbers2[i]==1){   //系数为1
						 result+="x";
					}else if(numbers2[i]==-1){  //系数为-1
						 result+="-x";
					}else{
						result+=numbers2[i]+"x";
					}
				}else if(numbers2[i]<0){
					if(numbers2[i]==-1){  //系数为-1
						result+="x";
					}else{
						result+=numbers2[i]+"x";
					}
				}else{
					if(numbers2[i]==1){   //系数为1
						result+="+x";
					}else{
						result+="+"+numbers2[i]+"x";
					}
				}
				
			}
			//幂等于0且系数不等于0时
			if(i==0&&numbers2[i]!=0){
				if(numbers2[i]<0){
					result+=numbers2[i];
				}else if("".equals(result)){
					result+=numbers2[i];
				}else{
					result+="+"+numbers2[i];
				}
			}
			//结果为0时
			if("".equals(result)&&i==0&&numbers2[i]==0){
				result="0";
			}
		}
		System.out.println(result);
	}

}

 

  • tic -tac - toe游戏

* 读入一个3X3的矩阵,矩阵中的数字为1表示该位置上有一个X,为0表示为O

* 程序判断这个矩阵中是否有获胜的一方,输出表示获胜一方的字符X或O,或输出无人获胜

 

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		final int SIZE=3;
		int[][]board=new int[SIZE][SIZE];
		boolean gotResult=false;
		int numOfX=0;
		int numOfO=0;
		//读入矩阵
		for(int i=0;i<board.length;i++){
			for(int j=0;j<board[i].length;j++){
				board[i][j]=in.nextInt();
			}
		}
		//检查行
		for(int i=0;i<board.length;i++){
			numOfX=0;
		    numOfO=0;
			for(int j=0;j<board[i].length;j++){
				if(board[i][j]==1){
					numOfX++;
				}else{
					numOfO++;
				}
			}
			System.out.println("检查行:X:"+numOfX+",O:"+numOfO);
			if(numOfX==SIZE||numOfO==SIZE){
				gotResult=true;
				break;
			}	
			
		}
		
		//检查列
		if(!gotResult){
			for(int i=0;i<board.length;i++){
				numOfX=0;
				numOfO=0;
				for(int j=0;j<SIZE;j++){
					if(board[j][i]==1){
						numOfX++;
					}else{
						numOfO++;
					}
				}
				System.out.println("检查列:X:"+numOfX+",O:"+numOfO);
				if(numOfX==SIZE||numOfO==SIZE){
					gotResult=true;
					break;
				}
			}
			
		}

		//检查对角线
		if(!gotResult){
			numOfX=0;
			numOfO=0;
			for(int i=0;i<SIZE;i++){
				if(board[i][i]==1){
					numOfX++;
				}else{
					numOfO++;
				}
				
			}
			if(numOfX==SIZE||numOfO==SIZE){
				gotResult=true;
			}
			System.out.println("检查对角线:X:"+numOfX+",O:"+numOfO);
		}
		//检查反对角线
		if(!gotResult){
			numOfX=0;
			numOfO=0;
			for(int i=0;i<SIZE;i++){
				if(board[i][SIZE-1-i]==1){
					numOfX++;
				}else{
					numOfO++;
				}
			}
			if(numOfX==SIZE||numOfO==SIZE){
				gotResult=true;
			}
			System.out.println("检查斜对角线:X:"+numOfX+",O:"+numOfO);
		}
		
		
		
		if(gotResult){
			if(numOfX==SIZE){
				System.out.println("X胜利");
			}else{
				System.out.println("O胜利");
			}
			
		}else{
			System.out.println("都玩儿完");
		}
	}

}

 

 


                                                                  循环


  • 求最大公约数

import java.util.Scanner;
public class Main11 {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int a=in.nextInt();
		int b=in.nextInt();
          //第一种方法:穷举
		int gcd=1;
		for(int i=2;i<=a&&i<=b;i++){
			if(a%i==0&&b%i==0){
				gcd=i;
			}
		}
		
		//第二种方法:辗转相除法
		int oa=a;
		int ob=b;
		while(b!=0){
		    int r=a%b;
		    System.out.println(a+","+b+","+r);
			a=b;
			b=r;
		}
		System.out.println(oa+"和"+ob+"的最大公约数为:"+a);


	}

}

 

  • 求f(n)=1-1/1+1/2-1/3+.....+1/n

import java.util.Scanner;
public class Main10 {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		double sum=0;
		//第一种
//		for(int i=1;i<=n;i++){
//			if(i%2==1){    //奇数位
//				sum+=1.0/i;
//			}else{
//				sum-=1.0/i;  //偶数位
//			}
//			
//		}
		
		//第二种
		int sign=1;
		for(int i=1;i<=n;i++,sign=-sign;){
			sum+=sign*1.0/i;	
		}
		System.out.println("f(n)=1-1/1+1/2-1/3+.....+1/n="+sum);
		System.out.printf("%.2f",sum);

	}

}

 

  • 求f(n)=1+1/1+1/2+1/3+.....+1/n

import java.util.Scanner;
public class Main9 {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		double result=0;
		System.out.println();
		for(int i=1;i<=n;i++){
			result+=1.0/i;
		}
		System.out.println("f(n)=1+1/1+1/2+1/3+.....+1/n="+result);
		System.out.printf("%.2f",result);  //按格式输出 取两位小数

	}

}

 

  • 凑硬币

用1角,2角,5角的硬币凑出用户输入的10元以下的金额

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		System.out.println("请输入您要换的钱数/元:");
		int money=in.nextInt(); //输入元
		money*=10; //元换成角
		for(int one=0;one<=money;one++){
			for(int two=0;two<=money;two++){
				for(int five=0;five<=money;five++){
					if(one+two*2+five*5==money){
						System.out.println("凑出"+one+"枚一角硬币,"+two+"枚两角硬币,"+five+"枚五角硬币");
					}
				}
				
			}
		}
	}
}

 

  • 输出前50个素数

public class Main {
	public static void main(String[] args) {
		int i=2;
		int count=0; //计数器变量
		while(count<50){
			int isPrime=1;
			for(int j=2;j<i;j++){
				if(i%j==0){
					isPrime=0;
					break;
				}
			}
			if(isPrime==1){
				count+=1;
				System.out.print(i+" ");
			}
			i++;
		}

	}
//判断是否能被已知的且<n的素数整除
//构造前50个素数的表
public class Main {
	public static void main(String[] args) {
		// 判断是否能被已知的且<n的素数整除
		//*构造前50个素数的表
		int[] primes=new int[50];
		primes[0]=2;
		int cnt=1; //当前已有的素数个数
		MAIN_LOOP:
		for(int x=3;cnt<primes.length;x++){
			for(int i=0;i<cnt;i++){
				if(x%primes[i]==0){
					continue MAIN_LOOP;
				}
			}
			primes[cnt++]=x;
		}
		for(int k:primes){
			System.out.print(k+" ");
		}
	}
	
}
  • 输出100以内的素数

 

public class Main {

	public static void main(String[] args) {
		for(int i=2;i<100;i++){
			int isPrime=1;
			for(int j=2;j<i;j++){
				if(i%j==0){
					isPrime=0;
					break;
				}
			}
			if(isPrime==1){
				System.out.print(i+" ");
			}
		}

	}

}
//构造素数表
	/**
	 * 素数的倍数一定不是素数
	 * 欲构造n以内的素数
	 * 1.令x为2
	 * 2.将2x/3x/4x甚至ax<n的数标记为非素数
	 * 3.令x为下一个没有被标记为非素数的数,重复2;直到所有的数都已经尝试完毕
	 * 
	 * 欲构造n以内(不含)的素数表
	 * 1.创建prime为boolean[n],初始化其所有元素为true,prime[x]为true表示x是素数
	 * 2.令x=2
	 * 3.如果x是素数,则对于(i=2;x*i<n;i++)令prime[i*x]=false
	 * 4.令x++,如果x<n,重复3,否则结束
	 */
public class Main {
	public static void main(String[] args) {
		boolean[] isPrime=new boolean[100];
		for(int i=0;i<isPrime.length;i++){
			isPrime[i]=true;   //初始化是false,需要反过来
		}
		for(int i=2;i<isPrime.length;i++){
			if(isPrime[i]){    //如果第i个元素时素数
				for(int k=2;i*k<isPrime.length;k++){ //它的倍数一定不是素数,标记为false
					isPrime[i*k]=false;
				}
			}
		}
		for(int i=2;i<isPrime.length;i++){  //从2开始遍历,输入是素数的元素的下标
			if(isPrime[i]){
				System.out.print(i+" ");
			}
		}
	}

}
  • 判断一个数是否是素数

 

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        boolean isPrime=true;
        
        //第一种方法 n-1遍 约等于 n遍
        for(int i=2;i<n;i++){
        if(n%i==0){
        isPrime=false;
        break;
        }
        }
        
        //第二种  去掉偶数后,从3到n-1,每次加2    循环(n-3)/2+1遍  约等于 n/2遍
        if(n==1||n%2==0&&n!=2){  //如果为不是2的偶数,肯定不是素数
        isPrime=false;
        }else{                     //否则要循环(n-3)/2+1遍     当n很大时就是n/2遍
        for(int i=3;i<n;i+=2){
        if(n%i==0){
        	isPrime=false;
        	break;
        }
        }
        }
        
        //第三种方法  无需到n-1,到sqrt(n)   n的平方根就够
        for(int i=3;i<Math.sqrt(n);i+=2){   //只需要循环sqrt(n)遍 
        if(n%2==0){
        isPrime=false;
        break;
        }
        }
        
        
        if(isPrime){
        System.out.println(n+"是素数");
        }else{
        System.out.println(n+"不是素数");
        }
    
    }

}

 

  • 念整数

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。

如输入1234,则输出:

yi er san si

注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:

fu er san si yi

输入格式:

一个整数,范围是[-100000,100000]。

输出格式:

表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

输入样例:

-30

输出样例:

fu san ling

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int number=in.nextInt();  //存储读入的数字
		String result=""; //存储结果
		boolean isMinus=false;  //是否为负数
		if(number<0){
			isMinus=true;  
			number=-number;  //转换为正数
		}
//		if(number==0){  //  用while循环需要判断数字为0时
//			result="ling";
//		}
		do{
			int units=number%10;
			switch(units){
			case 0:
				result="ling "+result;
				break;
			case 1:
				result="yi "+result;
				break;
			case 2:
				result="er "+result;
				break;
			case 3:
				result="san "+result;
				break;
			case 4:
				result="si "+result;
				break;
			case 5:
				result="wu "+result;
				break;
			case 6:
				result="liu "+result;
				break;
			case 7:
				result="qi "+result;
				break;
			case 8:
				result="ba "+result;
				break;
			case 9:
				result="jiu "+result;
				break;
			}
			number/=10;
		}while(number>0);
		if(isMinus){
			result="fu "+result;
		}
		System.out.println(result.trim());

	}
}

 

  • 素数和

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。

现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

注意,是第n个素数到第m个素数之间的所有的素数,并不是n和m之间的所有的素数。

输入格式:

两个整数,第一个表示n,第二个表示m。

输出格式:

一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入样例:

2 4

输出样例:

15

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		System.out.println("请输入素数个数区间[n,m]");
		int n=in.nextInt();
		int m=in.nextInt();
		int count=0;
		int i=2;
		int result=0;
		while(count<=m){
			boolean isPrime=true;
			for(int j=2;j<i;j++){
				//只能被1和本身整除
				if(i%j==0){
					//不是素数
					isPrime=false;
				}
			}
			if(isPrime){
				count++;
				if(count>=n&&count<=m){
					result+=i;
				}
			}
			
			i++;
		}
		System.out.println(result);
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值