目录:
- Java算法题
- 1. 编写Java程序, 打印几个特定的ASCII码,包括数组0和9,大写字母A和Z ,小写字母a和z
- 2.编写程序,对是哪个整型变量进行排序,按照从小到大的顺序排列
- 3.用if语句的嵌套,根据学生成绩判断等级
- 4.用switch语句,根据传入的月份的参数,显示该月有多少天。程序中假定2月份固定为28天,不考虑闰年问题
- 5.编写程序,使用while循环计算1+2+3+...+100的值。
- 6.编写程序,计算1+1/3+1/5+1/7+...+1/(2×n+1)的值。
- 7.编写程序,将32-126之间的95个字符显示在屏幕上。
- 8.用for循环编写九九乘法表
- 9.打印3~100之间的素数,每行打印6个数
- 10.获得任意一个时间的下一天
- 11.将某个时间以固定的格式转换为字符串
- 12.编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节数截取的字符串
- 13.判断回文数
- 14.输入一个数.且判断是不是斐波那契数
- 15.输入五个数,判断其最大值
- 16.计算银行利息题目 ,本金10万元,求什么年一共超过15万元
- 17.输入一个正整数,求各位数的数字之和
- 18.求数列s=1+12+123+1234+... 123456789的前九项的和
- 19.计算sum=1-1/2!+1/3!-... (-1)^(n-1)/n!
- 20.输入一个数,判断其是不是素数
- (不断添加中…)
Java算法题
1. 编写Java程序, 打印几个特定的ASCII码,包括数组0和9,大写字母A和Z ,小写字母a和z
/*编写Java程序, 打印几个特定的ASCII码,包括数组0和9,大写字母A和Z ,小写字母a和z*/
public class PrintAscii {public void dispAscii(char ch) { //输入的字符int ascii =(int) ch; //将字符转换为“ASCII码”System.out.println(ch+"的Ascii码是: "+ascii);}public static void main(String[] args) {PrintAscii pa = new PrintAscii();pa.dispAscii('0'); //48pa.dispAscii('9'); //57pa.dispAscii('A'); //65pa.dispAscii('Z'); //90pa.dispAscii('a'); //97pa.dispAscii('z'); //122}
}
2.编写程序,对是哪个整型变量进行排序,按照从小到大的顺序排列
/*编写程序,对是哪个整型变量进行排序,按照从小到大的顺序排列*/
public class SortABC {public static void main(String[] args) {int a = 100, b = 5, c = 307;int t;if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}System.out.println("排序之后: a="+a+", b="+b+", c="+c);}
}
3.用if语句的嵌套,根据学生成绩判断等级
/*用if语句的嵌套,根据学生成绩判断等级*/
public class IfDemo {public static void main(String[] args) {int score = 95;String grade;if (score >= 90) {grade = "优";}else if(score >= 80){grade = "良";}else if(score >= 70){grade = "中";}else if(score >= 60){grade = "及格";}else {grade = "不及格";}System.out.println("学生的成绩为: "+score);System.out.println("学生的等级为: "+grade);}
}
4.用switch语句,根据传入的月份的参数,显示该月有多少天。程序中假定2月份固定为28天,不考虑闰年问题
/*用switch语句,根据传入的月份的参数,显示该月有多少天。程序中假定2月份固定为28天,不考虑闰年问题*/
public class SwitchDemo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入月份: ");int month = scanner.nextInt();int days = 0;switch (month) {case 2 : days = 30; break;case 4 : days = 30; break;case 6 : days = 30; break;case 9 : days = 30; break;case 11 : days = 30; break;default : days = 31;}System.out.println(month+"月有"+days+"天");}
}
5.编写程序,使用while循环计算1+2+3+…+100的值。
/*编写程序,使用while循环计算1+2+3+...+100的值*/
public class Sum100 {public static void main(String[] args) {int i = 1;int sum = 0;while (i <= 100) {sum += i;i++;}System.out.println("1到100的累加和是: "+sum);}
}
6.编写程序,计算1+1/3+1/5+1/7+…+1/(2×n+1)的值。
/*编写程序,计算1+1/3+1/5+1/7+...+1/(2×n+1)的值。要求计算到1/(2×n+1)小于0.00001时为止。当循环结束时,显示上述表达式中的n值,以及计算结果*/
public class DoWileDemo {public static void main(String[] args) {int n = 1;double sum = 1.0,temp;do {temp = 1.0/(2*n+1);sum += temp;n++;} while (temp >= 0.00001);System.out.println("循环结束时n的值为: "+(n-1));System.out.println("计算出来的结果是: "+sum);}
}
7.编写程序,将32-126之间的95个字符显示在屏幕上。
/*编写程序,将32-126之间的95个字符显示在屏幕上。为了美观,要求小于100的码值前填充一个0,每打印8个字符*/
public class ShowAscii {public static void main(String[] args) {String temp = "";for (int i = 32; i <= 126; i++) {//如果码值小于100,则码值前会填充一个0temp = i < 100 ?("0"+i):(""+i);System.out.print(temp+"="+(char)i+" ");if ((i - 31) % 8 == 0) {System.out.print("\n");}}}
}
8.用for循环编写九九乘法表
/*用for循环编写九九乘法表*/
public class ChengFaBiao {public static void main(String[] args) {int i,j;for (i = 1; i <= 9; i++) {for (j = 1; j <= i; j++) {System.out.print(i+"*"+j+"="+i*j+"\t");}System.out.println("\n");}}
}
9.打印3~100之间的素数,每行打印6个数
/*打印3~100之间的素数,每行打印6个数*/
public class SuSu {//素数 : 素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数public static void main(String[] args) {System.out.println("3~100之间的素数有: ");boolean flag;int count = 0; //统计素数的个数for (int i = 3; i <= 100; i++) {//先假定该数为素数flag = true;for (int j = 2; j <= i / 2; j++) {if (i % j == 0) {//能其其他数整除,其不是素数flag = false;break;}}if (flag) { //如果是素数,则输出该素数System.out.print(i+"\t");count++;if (count % 6 == 0) {System.out.println();}}}}
}
10.获得任意一个时间的下一天
/*获得任意一个时间的下一天*/
public class NextDay {public static void main(String[] args) {/*java.util.Date类的底层实现是通过一个long类型的整型数据来保存日期,这个值记录的是任何一个时间距1970年1月1日,0点0分0秒的毫秒数。*/Date now = new Date(); //获得当前时间//打印下一天的时间System.out.println(getNextDate(now)+"==========");}//获得下一天的时间private static Date getNextDate(Date d) {/*增加的时间为一天。一天有24小时,一小时有60分钟,一分钟有60秒,1秒为1000毫秒*/long addTime = 1 * 24 * 60 * 60 * 1000; //表示一天时间的毫秒数System.out.println(addTime+" ---- ");//用毫秒数构造新的日期Date date = new Date(d.getTime() + addTime);return date;}
}
11.将某个时间以固定的格式转换为字符串
/*将某个时间以固定的格式转换为字符串*/
public class DateFormat {public static void main(String[] args) {//现在的时间Date now = new Date();//打印现在时间的字符串格式System.out.println(dateFormatStr(now));}//将Date类型格式的时间,转换为特定字符串格式的时间 的方法private static String dateFormatStr(Date now) {//定义字符串的格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = sdf.format(now);return str;}
}
12.编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节数截取的字符串
编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节数截取的字符串。但要保证函数不被截半个,如"我ABC" 4,应该截取 “我AB”,输入“我ABC汉DEF” 6,应该输出 “ABC”,而不是"我ABC+汉的半个"。
试题分析: 容易产生混淆的是中文字符和英文字符。要注意的是: 中文字符占两个字节,英文字符占一个字节。(此程序:如果一个汉字被截取了1个字节的话,是会被丢弃的)
/*编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节数截取的字符串。但要保证函数不被截半个,如"我ABC" 4,应该截取 "我AB",输入“我ABC汉DEF” 6,应该输出 “ABC”,而不是"我ABC+汉的半个"。试题分析: 容易产生混淆的是中文字符和英文字符。要注意的是: 中文字符占两个字节,英文字符占一个字节。(此程序:如果一个汉字被截取了1个字节的话,是会被丢弃的)*/ public class InterceptionStr { //此程序:如果一个汉字被截取了1个字节的话,是会被丢弃的。static String ss; //要进行截取操作的字符串static int n; //截取的字符串的字节数public static void main(String[] args) {System.out.println("请输入字符串: ");Scanner sc1 = new Scanner(System.in);ss = sc1.next(); //将Scanner对象中的内容以字符串的形式取出来System.out.println("请输入字节数:");Scanner sc2 = new Scanner(System.in);n = sc2.nextInt(); //将Scanner对象中的内容以数值的形式取出来//调用截取字符串的方法interception(setValue()); //传给该方法的参数为: 一个字符串数组}/*将“字符串”转换为“字符串数组“*/public static String[] setValue() {//创建一个字符串数组String[] string = new String[ss.length()];//将”字符串“中的每个"字符"取出且存入到"字符串数组string"中for (int i = 0; i < string.length; i++) {//只包括i,不包括i+1string[i] = ss.substring(i, i+1); //将字符串ss中的第i个"字符"取出,放入“字符串数组”中}return string; //将这个字符数组返回}/*截取字符串的方法*/public static void interception(String [] string) {int count = 0;String pattern = "[\u4e00-\u9fa5]"; //汉字的正则表达式System.out.println("以每" + n + "字节划分的字符串如下所示: ");for (int i = 0; i < string.length; i++) {//判断字符串数组中的每一个字符串是“汉字”还是“数字”//将字符数组中的每一个元素与正则表达式进行匹配,如果相同则返回true,同时计算该要被截取的字符串ss的字节数: countif (string[i].matches(pattern)) {count = count + 2; //如果当前字符是汉字,计时器count就+2} else {count = count + 1; //如果当前字符不是汉字,计时器count+1}if (count < n) { //如果当前计时器count的值小于n,则输出当前字符串System.out.print(string[i]);} else if (count == n) { //如果当前计时器count的值等于n,则输出当前字符串System.out.print(string[i]);count = 0; //因为一次截取n个字节,现在已经够了,重新开始截取下一次的n个字节System.out.println();} else {count = 0; //如果当前计时器count的大于n。则计算器count清零,接着执行外部循环System.out.println();}}} }
13.判断回文数
- 如何判断回文数。
有这样一类数,它们顺着看和倒着看是相同的数,该数即为"回文数"
例如: 121、656、2322,这样的数字被称为回文数字。- 试题分析:可以通过该数字倒置的位置栏判断它是否是回文数字。
/*如何判断回文数。有这样一类数,它们顺着看和倒着看是相同的数,该数即为"回文数"例如: 121、656、2322,这样的数字被称为回文数字。试题分析:可以通过该数字倒置的位置栏判断它是否是回文数字。*/ public class Palindrome {public static void main(String[] args) {int n;System.out.println("请输入一个整数: ");Scanner scInt = new Scanner(System.in);n = scInt.nextInt();if (isPalindrome(n)) {System.out.println(n + "是回文!");} else {System.out.println(n + "不是回文!");}}//判断是不是回文数private static boolean isPalindrome(int n) {//调用方法,将要判断的数进行倒置int m = reverse(n);if (m == n) { //如果不倒置数 = 倒置数,有其是回文数return true;} else {return false;}}//将传入的数进行倒置private static int reverse(int i) {int s, j = 0;s = i;while (s != 0) {// *10 的原因: 倒置的话每次位数要升一级,自然要*10j = (j * 10) + (s % 10);s = s / 10;}return j;} }
14.输入一个数.且判断是不是斐波那契数
Scanner in = new Scanner (System.in);System.out.println("请输入一个整数:");int shuzhi = in.nextInt();while (shuzhi>f1) {f3=f1+f2;f1=f2;f2=f3; //出现所有的Fibonacci数,且让f2也当过所有的...数
}if (shuzhi==f2) {System.out.println(shuzhi+"是Fibonacci数");}elseSystem.out.println(shuzhi+"不是Fibonacci数");
15.输入五个数,判断其最大值
/** 思想:设置max 和先输入一个数,并设其为最大值,然在循环语句中输入剩余的四个数,符合条件则让它是最大值,不是则继续循环,输入数字。*/
import java.util.Scanner;
public class shijie {public static void main(String[] args) {Scanner in = new Scanner(System.in);int soum1,max,x,weishu=1;System.out.println("请输入一个数"); soum1 = in.nextInt();max = soum1;while(weishu<=4){System.out.println("请输入一个数"); x = in.nextInt(); if(x>max){max = x; }weishu++;}System.out.println("最大值为:" +max); }
}
16.计算银行利息题目 ,本金10万元,求什么年一共超过15万元
int year =2018; float money = 10l;while (money <=15) {money *= 1.04f;year++;}System.out.println("超过的时间是:" +year );
17.输入一个正整数,求各位数的数字之和
//题目:题目四:输入一个正整数,各位数的数字之和。
/** 原理:先用求余(%),求出最后一位数的数,--相加* -----有此效果的原因:%后会有一个余数(如789/10=78...9(余9),那用上%号就收集此余数* 然后用除法 (/),删除刚刚已经用过的最后一位数,-----* -----有此效果的原因:/ 后由于整数求除的性质,+任何数10 = 就是有一个整数带加一个余数,(如789/10=78...9(余9),结合整除小数点后没有内容,就去掉了最后一位数)**/
//声明的变量有:weishu,sum;
import java.util.Scanner;
public class One {public static void main(String[] args) {Scanner in = new Scanner(System.in);int weishu ,sum=0,a;System.out.println("请输入一个数");weishu = in.nextInt();while (weishu !=0){ //输入的数不等于0,才能继续操作//收集位数的最后一项,且相加a = weishu%10;sum = sum +a;//除去刚已用过的位数,形成一个新的数weishu = weishu/10;}System.out.println("各位数之和为" +sum);}
}
18.求数列s=1+12+123+1234+… 123456789的前九项的和
/*
求数列s=1+12+123+1234+... 123456789的前九项的和*/
public class One {public static void main(String[] args) {int sum =0 ,i= 1,a= 0 ;int weishu = 9;while (i<=weishu) {a= a*10+i;sum +=a;i++;}System.out.println(sum);}
}
19.计算sum=1-1/2!+1/3!-… (-1)^(n-1)/n!
/*计算sum=1-1/2!+1/3!-... (-1)^(n-1)/n!*/
import java.util.Scanner;
public class Demo {public static void main(String[] args) {Scanner in = new Scanner (System.in);double z =0,x=1; int y=1,n;System.out.println("请输入一个数" );n = in.nextInt();while (y<=n) {z = z+x;y= y+1;x= x*(1.0/y);}System.out.println("sum:" +z );}
}
20.输入一个数,判断其是不是素数
public class Demo {public static void main(String[] args) {Scanner in = new Scanner (System.in);System.out.println("请输入一个数");int soum1 = in.nextInt();boolean soum2 = false;for (int i =2;i<soum1;i++) {if (soum1%i == 0) {soum2 = true;}}if (soum2) {System.out.println("此数不是素数");}else {System.out.println("此数是素数");}}
}