计算机考研复试编程题基础Java版(二)

6、非对称素数之和

      输入:第一行输入两个数m,n,(2<=m<n<=9999)。求出在范围[m,n)既满足非对称,又是素数的数值以及之和。

      输出:无(非对称:即如13,15,17......)

public static void main(String[]args) {
		
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();//区间下限
		int n = sc.nextInt();//区间上限
		int sum = 0;
		for(int i = m;i<n;i++) {
			if(issu(i)) {
				sum+=i;
				System.out.println(i);
			}
		}
		System.out.println(sum);
	}
	static boolean issu(int a) {  //判断传进来的这个数是否是 非对称素数
		boolean rea = true;
		StringBuffer sb = new StringBuffer(Integer.toString(a));
		for(int i=2;i<a;i++) {
			if(a%i==0) {//数a存在某因子,则它不是素数
				rea = false;
			}
		}
		if(Integer.parseInt(sb.reverse().toString())==a) {//这个数是否对称
			rea = false;
		}
		return rea;
	}

7、最小差值(ccf 201712-1)

      问题描述:给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。

      输入:输入第一行包含一个整数n。第二行包含n个正整数,相邻整数之间使用一个空格分隔。

      输出:输出一个整数,表示答案。

import java.util.*;
public class Main {
	
	public static void main(String[]args) {
		
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.nextLine());
		String s[] = sc.nextLine().split(" ");
		int shu[] = new int[n];
		for(int i=0;i<n;i++) {
			shu[i] = Integer.parseInt(s[i]);
		}
		int res = shu[0]>shu[1]?shu[0]-shu[1]:shu[1]-shu[0];
		int ta=0;
		for(int j=0;j<n;j++) {
			for(int k=j+1;k<n;k++) {
				ta = shu[j]>shu[k]?shu[j]-shu[k]:shu[k]-shu[j];//三目运算求差值
				if(ta<res) {
					res = ta;
				}
				
			}
		}
		System.out.println(res);
	}
	
}

8、最大波动(ccf 201609-1)

      问题描述:小明正在利用股票的波动程度来研究股票。小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少。

      输入:输入的第一行包含了一个整数n,表示小明拿到的收盘价格的连续天数。

                 第二行包含n个正整数,依次表示每天的收盘价格。

      输出:输出一个整数,表示这只股票这n天中的最大波动值。

import java.util.*;
public class Main04 {
	
	public static void main(String[]args) {
		
		Scanner sc = new Scanner(System.in);
		int n = Integer.parseInt(sc.nextLine());
		String s[] = sc.nextLine().split(" ");
		int shu[] = new int[n];
		for(int i=0;i<n;i++) {
			shu[i] = Integer.parseInt(s[i]);
		}
		int cha[] = new int[n-1];
		for(int j=0;j<n-1;j++) {
			cha[j]=shu[j]>shu[j+1]?shu[j]-shu[j+1]:shu[j+1]-shu[j];//利用三目运算比较方便些
		}
		Arrays.sort(cha);
		System.out.println(cha[n-2]);
	}
	
}

9、数位之和(ccf 201512-1)

      问题描述:给定一个十进制整数n,输出n的各位数字之和。

      输入:输入一个整数n

      输出:输出一个整数,表示答案。

import java.util.*;
public class Main05 {
	
	public static void main(String[]args) {
		
		Scanner sc = new Scanner(System.in);
                //由于不知道其位数 ,这里我直接将数字转化为字符串进行处理
		String s[] = sc.nextLine().split("");
		int res=0;
		for(int i=0;i<s.length;i++) {
			res +=Integer.parseInt(s[i]);
		}
		System.out.println(res);
	}
	
}

10、日期计算(201509-2)

      问题描述:给定一个年份y和一个整数d,问这一年的第d天是几月几日?
           注意闰年的2月有29天。满足下面条件之一的是闰年:
           1) 年份是4的整数倍,而且不是100的整数倍;
           2) 年份是400的整数倍。

      输入:输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
            输入的第二行包含一个整数dd在1至365之间。

      输出:输出两行,每行一个整数,分别表示答案的月份和日期。

import java.util.*;
public class Main01 {
	
	public static void main(String[]args) {
		Scanner sc = new Scanner(System.in);
		int y = sc.nextInt();
		int d = sc.nextInt();
		int m = 0,day = 0;
		int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
		if(isRun(y)) {
			days[1]=29;   //如果是闰年的话,二月为29天
		}
		int sumday=0;
		for(int i=0;i<12;i++) {
			sumday+=days[i];
			if(sumday>d) {
				m=i+1;
				day = d-(sumday-days[i]);
				break;
			}
		}
		System.out.println(m);
		System.out.println(day);
		
	}
	
	static boolean isRun(int y) {
		boolean res = false;
		if(y%4==0&&y%100!=0) {   //1) 年份是4的整数倍,而且不是100的整数倍
			res = true;
		}
		else if(y%400==0) {      //年份是400的整数倍
			res =true;
		}
		return res;
	}
	
}

      可惜这个代码得分90,不知道问题出在哪里,也想请大家帮忙找一下

11、向下取整

      输入:一个double类型的浮点数

      输出:将其向下取整

	static int ru(double n) {
		int a=0;
		n=n*10;
		a = (int)n/10;
		return a;
	}

12、最大公约数

      输入:两个正整数

      输出:求出它们的最大公约数

//计算两个整数的最大公约数
	static int run(int a,int b) {
		int res;
		if(a>b) {
			for(int i=b;;i--) {
				if(a%i==0&&b%i==0) {
					res=i;
					break;
				}
			}
		}else {
			for(int i=a;;i--) {
				if(a%i==0&&b%i==0) {
					res=i;
					break;
				}
			}
		}
		return res;
		
	}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值