入门级
1、写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。(取近似值)例输入5.5输出6
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
double d = scan.nextDouble();
int dint = (int)d;
if((d-dint)>=0.5 && (d-dint)<1)
dint++;
System.out.println(dint);
}
}
}
2、输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内 例输入5输出2
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int count = 0;
while(n>0){
if((n&1)>0){
count++;
}
n=n>>1;
}
System.out.println(count);
}
}
3、输入整型数组和排序标识,对其元素按照升序或降序进行排序。
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输出描述:
输出排好序的数字
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int n=in.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++){
a[i]=in.nextInt();
}
Arrays.sort(a);
int b=in.nextInt();
if(b==0){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
if(b==1){
for(int i=a.length-1;i>=0;i--){
System.out.print(a[i]+" ");
}
}
System.out.println();
}
}
}
简单级
1、输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
StringBuffer sb = new StringBuffer(str);
sb.reverse();
System.out.println(sb.toString());
}
}
2、接收一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String s=sc.nextLine();
for(int i=s.length()-1;i>=0;i--){
System.out.print(s.charAt(i));
}
}
}
}
3、有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是 5 瓶,方法如下:先用 9 个空瓶子换3瓶汽水,喝掉 3 瓶满的,喝完以后 4 个空瓶子,用 3 个再换一瓶,喝掉这瓶满的,这时候剩 2 个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用 3 个空瓶子换一瓶满的还给老板。如果小张手上有 n 个空汽水瓶,最多可以换多少瓶汽水喝?
// f(n)=n/3 + f(n%3+n/3),貌似递归次数更少。
// n/3是能直接换到的汽水数,n%3+n/3是新换到的汽水瓶子+上次换剩下的
import java.util.*;
public class Main {
public static int f(int n) {
if (n == 1)
return 0;
if (n == 2)
return 1;
return n / 3 + f(n % 3 + n / 3);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int num = sc.nextInt();
if (num != 0) {
System.out.println(f(num));
}
}
sc.close();
}
}
4、对字符串中的所有单词进行倒排。
①构成单词的字符只有26个大写或小写英文字母;
②非构成单词的字符均视为单词间隔符;
③要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
④每个单词最长20个字母;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String[] sp = sc.nextLine().split("[^a-zA-Z]+");
StringBuilder sb = new StringBuilder();
for (int i = sp.length - 1; i >= 0; i--)
sb.append(sp[i] + " ");
System.out.println(sb.toString().trim());
sc.close();
}
}
5、有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int input = sc.nextInt();
System.out.println(Main.getNumber(input));
}
}
//通过列举出每月的有生育能力兔子的数目,没有生能力的兔子的说目,一月大的兔子的数目和二月大的兔子的数目可知
//
public static int getNumber(int mounth){
if(mounth == 1 || mounth == 2){
return 1;
}
int tempold = 1;
int tempyoung = 1;
int mounth1 = 1;
int mounth2 = 0;
for(int j = 4; j <= mounth; j++){
//第一步,第二个月的变成了有生育能力的兔子
tempold += mounth2;
//第二步,一个月大的兔子变成了两个月大的兔子
mounth2 = mounth1;
//第三步,有生育能力的兔子生出了一个月大的小兔子
mounth1 = tempold;
//当月小兔子的个数
tempyoung = mounth1 + mounth2;
}
return tempold + tempyoung;
}
}
6、第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。杨辉三角
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
if(n<=2)
System.out.println(-1);
else if(n%2==1){
System.out.println(2);
}else{
if(n%4==0)
System.out.println(3);
else
System.out.println(4);
}
}
in.close();
}
}
7、给定一个字符串描述的算术表达式,计算出结果值。
输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。
数据范围:运算过程中和最终结果均满足 ,即只进行整型运算,确保输入的表达式合法
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.Scanner;
public class Main
{
public static void main(String args[]) {
String enter;
Scanner in = new Scanner(System.in);
while (in.hasNextLine()){
enter = in.nextLine();
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
try {
Object result = engine.eval(enter);
System.out.println(result);
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
}
8、完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
输入n,请输出n以内(含n)完全数的个数。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int N = in.nextInt();
int count = 0;
for(int i=1;i<=N;i++){
int sum=0;
for(int j=1;j<i;j++){
if(i%j==0){
sum+=j;
}
}
if(sum==i){
count++;
}
}
System.out.println(count);
}
}
}
9、把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int m = sc.nextInt();
int n = sc.nextInt();
if(m<1 || n>10){
System.out.println(-1);
}else{
System.out.println(shareCount(m,n));
}
}
}
public static int shareCount(int m, int n){
if(m<0){
return 0;
}
if(m==1 || n==1){
return 1;
}
return shareCount(m, n-1)+shareCount(m-n,n);
}
}
10、输入一个正整数,计算它在二进制下的1的个数。注意多组输入输出!!!!!!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
while (in.hasNext()) {
int a=in.nextInt();
int count=0;
while (a != 0) {
a&=a-1;
count++;
}
System.out.println(count);
}
}
}
11、公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?现要求你打印出所有花一百元买一百只鸡的方式。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int num = sc.nextInt();
int n1 = 0; // 鸡翁个数
int n2 = 0; // 鸡母个数
int n3 = 3; // 鸡雏个数
for(n1 = 0; n1 < 20; n1++){
for(n2 = 0; n2 < 33; n2++){
for(n3 = 0; n3 < 100; n3 = n3 + 3){
if(n1 + n2 + n3 == 100 && 5*n1 + 3*n2 + n3/3 == 100){
System.out.println(n1 + " " + n2 + " " + n3);
}
}
}
}
}
sc.close();
}
}
12、根据输入的日期,计算是这一年的第几天。保证年份为4位数且日期合法。
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int year = scanner.nextInt();
int month = scanner.nextInt();
int day = scanner.nextInt();
scanner.nextLine();
calculateDate(year, month, day);
}
scanner.close();
}
public static void calculateDate(int year, int month, int day) {
int sumDay = 0;
// 正常月份(index)对应的天数;
int[] normMonthDay = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断是不是闰年,如果是闰年,false;
boolean isNormYear = year % 4 == 0 ? false : true;
// 累加除了最后一个月份的天数;
for (int i = 1; i < month; i++) {
// 如果是闰年2月,那么闰年2月应为为29天
if (i == 2 && !isNormYear) {
sumDay += 29;
continue;
}
sumDay += normMonthDay[i];
}
// 加上最后一个月份的天数;
sumDay += day;
// 打印答案
System.out.println(sumDay);
}
}