赞
踩
import java.util.Scanner; /* * 题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长 * 到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? * 程序分析: 实际月份 1 2 3 4 5 6 7 8 * 幼仔对数 1 0 1 1 2 3 5 8 * 成兔对数 0 1 1 2 3 5 8 13 * 总体对数 1 1 2 3 5 8 13 21 * 幼仔对数=前月成兔对数 * 成兔对数=前月成兔对数+前月幼仔对数 * 总体对数=本月成兔对数+本月幼仔对数 * 可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数 * 列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。 */ public class Test01 { @SuppressWarnings("resource") public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.println("请输入月份:"); int month=in.nextInt(); //因为求的是总数,所以乘2,如果是对数就不需要乘2 System.out.println("第"+month+"月免子总数为"+recursive(month)*2); } /**递归实现 * @param n * @return */ public static int recursive(int n){ if(n==1||n==2){ return 1; }else{ return recursive(n-1)+recursive(n-2); } } /**for循环实现 * @param n * @return */ public static int fibonacciSequence(int n){ if(n<0){ return -1; } if(n==1||n==2){ return 1; } int result = 0; int prevFirst = 1;//结果数前第一个数 int prevSecond = 1;//结果数前二个数 for(int i=3;i<=n;i++){ result = prevFirst + prevSecond; prevSecond = prevFirst;//新的第二个数就是原先的第一个数 prevFirst = result;//新的第一个数就是结果数,这一句必须放在prevSecond = prevFirst之后 } return result; } }
/* * 题目:判断101-200之间有多少个素数,并输出所有素数。 * 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个 * 数),如果能被整除, 则表明此数不是素数,反之是素数。 */ public class Test02 { public static void main(String[] args) { /* //方法一 int count=0; for(int i=101;i<=200;i++){ boolean flag=false; for(int j=2;j<=Math.sqrt(i);j++){ if(i%j==0){ flag=false; break; }else{ flag=true; } } if(flag==true){ count++; System.out.println(i); } } System.out.println("素数个数为:"+count); */ //方法二 int m = 101; int n = 200; int count = 0; //统计素数个数 for(int i=m;i<n;i++){ if(isPrime(i)){ count++; System.out.print(i+" "); if(count%10==0){ System.out.println(); } } } System.out.println(); System.out.println("在"+m+"和"+n+"之间共有"+count+"个素数"); } private static boolean isPrime(int n){ boolean flag = true; if(n==1){ flag = false; }else{ for(int i=2;i<=Math.sqrt(n);i++){ if((n%i)==0 || n==1){ flag = false; break; }else { flag = true; } } } return flag; } }
/* * 题目:求100之内的素数 * 质数又称素数,有无限个。质数定义为在大于1的自然数中,除 * 了1和它本身以外不再有其他因数,这样的数称为质数。 */ public class Test03 { public static void main(String[] args) { //方法一,使用除sqrt(n)的方法求出的素数不包括2和3 boolean b=false; System.out.println("100以内的素数有:"); System.out.print(2+" "); System.out.print(3+" "); //因为4以上的偶数都能被2整除,所以循环排除偶数 for(int i=3;i<=100;i+=2){ for(int j=2;j<=Math.sqrt(i);j++){ if(i%j==0){ b=false; break; }else{ b=true; } } if(b==true){ System.out.print(i+" "); } } //方法二:使用除1位素数得2位方法,运行效率高通用性差。 System.out.println(""); int[] a=new int[]{2,3,5,7}; for(int i=0;i<4;i++){ System.out.print(a[i]+" "); } boolean b2=false; for(int i=11;i<100;i+=2){ for(int j=0;j<4;j++){ if(i%a[j]==0){ b2=false; break; }else{ b2=true; } } if(b2==true){ System.out.print(i+" "); } } } }
import java.util.Scanner; /* * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 * 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步 * 骤完成: * (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数 * 的过程已经结束,另外 打印出即可。 * (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数 * n.重复执行第二步。 * (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 */ public class Test04 { public static void main(String[] args) { System.out.println("请输入一个正整数:"); @SuppressWarnings("resource") Scanner in=new Scanner(System.in); int n=in.nextInt(); int k=2; System.out.print(n+"="); while(k<=n){ if(k==n){ System.out.print(n); break; }else if(n%k==0){ System.out.print(k+"*"); n=n/k; }else{ k++; } } }
import java.util.Scanner; /* * 题目:利用条件运算符的嵌套来完成此题:学习 * 成绩> =90分的同学用A表示,60-89分之 * 间的用B表示,60分以下的用C表示。 * * 知识点: * 3目运算符: 当某个变量的值来源于某个判定的结果,而决定赋予特定的少量值。 * if else:所有的判定都可以用它来解决 * switch case: * 1.switch 只判定1次(整个表达式只有一个结果:true) * 2.当某个case为符合值,那么表达式switch就为true * 就直接执行case后面的代码,当碰到第一个break才结束 * 3.switch(变量):整形,char,枚举. * //case 值: 值不可以是 表达式 例如 >90. 值只能是例如 5,6等。 * //case 中的值 不可以重复 */ public class Test05 { public static void main(String[] args) { //方法一: @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个成绩:"); int score=in.nextInt(); /* if(score>=90){ System.out.println("成绩为A"); }else if(score>=60){ System.out.println("成绩为B"); }else{ System.out.println("成绩为C"); } */ char grade; grade=score>=90?'A' :score>=60?'B' :'C'; System.out.println("成绩为:"+grade); //方法二: // getResults(); } @SuppressWarnings("resource") public static void getResults(){ Scanner sc =new Scanner(System.in); System.out.println("请您输入分数:0-100"); int num=sc.nextInt(); int i=(num>=0&&num<=100)?num/10:-1;//整除 String s=null;//对象类型可以赋予 null 的初始值 switch(i){//switch(变量) case 10: case 9: s="A"; break; case 8: case 7: case 6: s="B"; break; case -1: s="输入的分数有问题"; break; default://当上门的case没有符合的值,就执行 default s="C"; break; } System.out.println(s); } }
import java.util.Scanner; /* * 题目:输入两个正整数m和n,求其最大公约数和最小公倍 数。 */ public class Test06 { public static void main(String[] args) { //方法一 /* * 程序分析:先判断两个数谁大谁小,用较大的除以较小的 * 数,如果能整除,说明较大的数为最小公倍数,较小的数 * 为最大公约数。反之,求出两数所有的公约数,最大那个 * 就是所求的数。然后用两数的乘积除以最大公约数就可以 * 求出最小公倍数。 */ @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个正整数m:"); int m=in.nextInt(); System.out.println("请输入另一个正整数n:"); int n=in.nextInt(); int max = 0; int min = 0; if(m>n){ max=m; min=n; }else{ max=n; min=m; } if (max%min==0) { System.out.println("最大公约数是:"+min); System.out.println("最小公倍数是:"+max); }else{ int k = 0; for (int i = 1; i < min; i++) { if (max % i == 0 && min % i == 0) { k++; } } int[] maxArrays=new int[k]; for (int i = 1; i < min; i++) { if (max % i == 0 && min % i == 0) { maxArrays[k-1] = i; k--; } } System.out.println("最大公约数是:"+maxArrays[0]); System.out.println("最小公倍数是:"+max*min/maxArrays[0]); } //方法二 /* * 程序分析:在循环中,只要除数不等于0,用较大数除以较 * 小的数,将小的一个数作为下一轮循环的大数,取得的余数 * 作为下一轮循环的较小的数,如此循环直到较小的数的值 * 为0,返回较大的数,此数即为最大公约数,最小公倍数 * 为两数之积除以最大公约数。 */ int a,b,m2; @SuppressWarnings("resource") Scanner s = new Scanner(System.in); System.out.print( "请输入一个整数: "); a = s.nextInt(); System.out.print( "再输入一个整数: "); b = s.nextInt(); max cd = new max(); m2 = cd.maxNum(a,b); int n2 = a * b / m2; System.out.println("最大公约数: " + m2); System.out.println("最小公倍数: " + n2); } } class max{ public int maxNum(int x, int y) { int t; if (x < y) { t = x; x = y; y = t; } while (y != 0) { if (x == y) return x; else { int k = x % y; x = y; y = k; } } return x; } }
import java.util.Scanner; /* * 题目:输入一行字符,分别统计出其中英文字母、空 * 格、数字和其它字符的个数。 */ public class Test07 { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.print("请输入一串字符:"); Scanner in = new Scanner(System.in); String str = in.nextLine();//将一行字符转化为字符串 in.close(); count(str); } //统计输入的字符数 private static void count(String str){ String E1 = "[a-zA-Z]"; String E2 = "[0-9]"; String E3 = "\\s";//空格 int countLetter = 0; int countNumber = 0; int countSpace = 0; int countOther = 0; char[] array_Char = str.toCharArray();//将字符串转化为字符数组 String[] array_String = new String[array_Char.length]; //把字符数组赋给字符串数组 for(int i=0;i<array_Char.length;i++) array_String[i] = String.valueOf(array_Char[i]); //遍历字符串数组中的元素 for(String s:array_String){ if(s.matches(E1)) { countLetter++; }else if(s.matches(E2)) { countNumber++; }else if(s.matches(E3)) { countSpace++; }else { countOther++; } } System.out.println("输入的字母个数:"+countLetter); System.out.println("输入的数字个数:"+countNumber); System.out.println("输入的空格个数:"+countSpace); System.out.println("输入的其它字符个数:"+countOther); } }
/* * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是 * 一个数字。例如2+22+222+2222+22222(此时共有5个 * 数相加),几个数相加有键盘控制。 */ public class Test08 { public static void main(String[] args) { int b=0,s=0,i=1; String str=null; @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入a的值:"); int a=in.nextInt(); System.out.println("请输入相加的个数n:"); int n=in.nextInt(); if(n==1){ str="s="+a; }else if(n==2){ str="s="+a+"+"+a+a; }else if(n==3){ str="s="+a+"+"+a+a+"+"+a+a+a; }else if(n==4){ str="s="+a+"+"+a+a+"+"+a+a+a+"+"+a+a+a+a; }else{ str="s="+a+"+"+a+a+"+"+a+a+a+"+...+"+a+a+"..."+a; } while(i<=n){ b+=a; s+=b; a=a*10; i++; } System.out.println(str+"="+s); } }
/* * 题目:一个数如果恰好等于它的因子之和,这个数就称 * 为 "完数 "。例如6=1+2+3.编程 找出1000以 * 内的所有完数。 */ public class Test09 { public static void main(String[] args) { // TODO 自动生成的方法存根 int n=1; System.out.println("1到1000的数中"); while(n<1000){ int t=0; int k=0; //统计因子的个数,作为数组的长度 for(int i=1;i<=n/2;i++){ if(n%i==0){ k++; } } int[] arr=new int[k]; int m=0; //计算所有因子之和,并把因子赋值给数组 for(int i=1;i<=n/2;i++){ if(n%i==0){ t+=i; arr[m]=i; m++; } } String str=""; for(int i=0;i<arr.length;i++){ str+=arr[i]+"+"; } if(n==t){ str=str.substring(0,str.length()-1);//去掉最后一个加号 System.out.println(n+"是完数,"+n+"="+str); } n++; } } }
/* * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再 * 落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? */ public class Test10 { public static void main(String[] args) { int k=0; double n=100; double sum=0; while(k<10){ // 一个来回 sum += n + n / 2; n = n / 2; k++; } System.out.println("第10次落地时,共经过"+sum+"米"); System.out.println("第10次反弹"+n+"米"); } }
/* * 题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的 * 三位数?都是多少? */ public class Test11 { public static void main(String[] args) { // TODO 自动生成的方法存根 int count=0; for(int x=1;x<5;x++){ for(int y=1;y<5;y++){ for(int z=1;z<5;z++){ if(x!=y&&x!=z&&y!=z){ count++; System.out.println(x*100+y*10+z); } } } } System.out.println("能组成"+count+"个不同的数"); } }
import java.util.Scanner; /* * 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元 * 时,奖金可提10%;利润高于10万元,低于20万元时,低于10万 * 元的部分按10%提成,高于10万元的部分,可提成7.5%;20万 * 到40万之间时,高于20万元的部分,可提成5%;40万到60万之 * 间时高于40万元的部分,可提成3%;60万到100万之间时,高 * 于60万元的部分,可提成1.5%,高于100万元时,超过100万元 * 的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? */ public class Test12 { public static void main(String[] args) { // TODO 自动生成的方法存根 //方法一 System.out.println("请输入当月利润(元):"); @SuppressWarnings("resource") Scanner in=new Scanner(System.in); double profit=in.nextInt(); double bonus=0; if(profit<=100000){ bonus=profit*10/100; }else if(profit>100000 && profit<=200000){ bonus=10000+(profit-100000)*75/1000; }else if(profit>200000 && profit<=400000){ bonus=10000+7500+(profit-200000)*5/100; }else if(profit>400000 && profit<=600000){ bonus=10000+7500+10000+(profit-400000)*3/100; }else if(profit>600000 && profit<=1000000){ bonus=10000+7500+10000+6000+(profit-600000)*15/1000; }else{ bonus=10000+7500+10000+6000+6000+(profit-1000000)*1/100; } System.out.println("应发放奖金:"+bonus+"元"); //方法二 double x = 0, y = 0; System.out.print("输入当月利润(万):"); x = in.nextInt(); if (x > 0 && x <= 10) { y = x * 0.1; } else if (x > 10 && x <= 20) { y = 10 * 0.1 + (x - 10) * 0.075; } else if (x > 20 && x <= 40) { y = 10 * 0.1 + 10 * 0.075 + (x - 20) * 0.05; } else if (x > 40 && x <= 60) { y = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (x - 40) * 0.03; } else if (x > 60 && x <= 100) { y = 10 * 0.175 + 20 * 0.05 + 20 * 0.03 + (x - 60) * 0.015; } else if (x > 100) { y = 10 * 0.175 + 20 * 0.08 + 40 * 0.015 + (x - 100) * 0.01; } System.out.println("应该提取的奖金是 " + y + "万"); } }
import java.util.Scanner; /** * * 个人所得税计算器 个人所得税计算器,编写程序实现个人所得税的计算,要求从控制台输入本月实际收入,求出本月应纳个税。 个人所得税计算公式: 月应纳税所得额=月实际收入-个税起征点(2000.00) 月应纳个人所得税税额=K1×F1+K2×F2+K3×F3+…+Kn×Fn 其中Kn表示月应纳税所得额在第n级的部分,Fn表示第n级的税率。 个人所得税率表: 级数 全月应纳税所得额 税率(%) 1 不超过500元的 5 2 超过500元至2,000元的部分 10 3 超过2,000元至5,000元的部分 15 4 超过5,000元至20,000元的部分 20 5 超过20,000元至40,000元的部分 25 6 超过40,000元至60,000元的部分 30 7 超过60,000元至80,000元的部分 35 8 超过80,000元至100,000元的部分 40 9 超过100,000元的部分 45 1,该习题主要考察的知识点:控制台输入和复杂的选择流程控制。 2,计算个人所得税时要注意,应纳税所得额要分段计算,即: 若某人的本月应纳税所得额为:7800.00元,则其中有500.00元 适用税率5%;有1500.00元适用税率10%;有3000.00元适用税率 15%;有2800.00元适用税率20%。则该员工应纳税: 500×5%+1500×10%+3000×15%+2800×20%=1185.00元 */ public class Test13 { @SuppressWarnings("resource") public static void main(String[] args) { //1.准备数据 Scanner sc=new Scanner(System.in); System.out.println("请输入您的薪水:"); double dnum=sc.nextDouble(); //需要计算出是第几档 double num=dnum-2000;//应该缴纳税的部分 int types=getTypes(num);//计算出档次 //有档次啦,可以进行计算 应该纳税的金额。 double ynum=getYnum(types,num);//计算出 需要纳多少税 //输出 System.out.println("您的收入:"+dnum); System.out.println("您应该纳税部分:"+num); System.out.println("您的税收为:"+ynum); if(ynum<=0){ System.out.println("纳税光荣,请加油"); } } /** * 计算应该纳多少税。 * @param types 档次,int类型 * @param num 应该纳税金额,double * @return double类型,需要的缴纳的税收 */ private static double getYnum(int types, double num) { //准备数据 double nums=0;//纳税的数量 switch(types){//假如:110000 case 9:nums=(num-100000)*0.45; num=100000; case 8:nums+=(num-80000)*0.4; num=80000; case 7:nums+=(num-60000)*0.35; num=60000; case 6:nums+=(num-40000)*0.3; num=40000; case 5:nums+=(num-20000)*0.25; num=20000; case 4:nums+=(num-5000)*0.2; num=5000; case 3:nums+=(num-2000)*0.15; num=2000; case 2:nums+=(num-500)*0.1; num=500; case 1:nums+=(num)*0.05; break; } return nums; } /** * 计算应该纳税部分的档次。 * @param num 需要纳税的金额 double类型 * @return int类型,档次,档分为:10档 */ private static int getTypes(double num) { int types=0;//默认为0档 if(num>100000){ types=9; }else if(num>80000){ types=8; }else if(num>60000){ types=7; }else if(num>40000){ types=6; }else if(num>20000){ types=5; }else if(num>5000){ types=4; }else if(num>2000){ types=3; }else if(num>500){ types=2; }else if(num>0){ types=1; } return types; } }
/* * 题目:输入某年某月某日,判断这一天是这一年的第几天? */ public class Test14 { public static void main(String[] args) { //方法一 // Scanner in=new Scanner(System.in); // System.out.println("请输入年:"); // int year=in.nextInt(); // System.out.println("请输入月:"); // int month=in.nextInt(); // System.out.println("请输入日:"); // int day=in.nextInt(); // if (month>2) { // for(int i=1;i<month;i++){ // if(i==4||i==6||i==9||i==11){ // day+=30; // }else if(i==2){ // if((year%4==0&&year%100!=0)||(year%400==0)){ // day+=29; // }else{ // day+=28; // } // }else{ // day+=31; // } // } // System.out.println("这一天是这一年的第"+day+"天"); // }else { // if(month==1){ // System.out.println("这一天是这一年的第"+day+"天"); // }else if(month==2){ // day+=31; // System.out.println("这一天是这一年的第"+day+"天"); // } // } //方法二 int year, month, day; int days = 0; int d = 0; int e; input fymd = new input(); do { e = 0; System.out.print("输入年:"); year = fymd.in(); System.out.print("输入月:"); month = fymd.in(); System.out.print("输入天:"); day = fymd.in(); if (year<0||month<0||month>12||day<0||day>31){ System.out.println("输入错误,请重新输入!"); e = 1; } } while (e == 1); for (int i = 1; i < month; i++) { switch (i) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: if ((year%400==0)||(year%4==0&&year%100!=0)){ days = 29; } else { days = 28; } break; } d += days; } System.out.println(year+"-"+month+"-"+day+"是这年的第"+(d+day)+"天。"); } } class input{ public int in() { int value = 0; @SuppressWarnings("resource") Scanner s = new Scanner(System.in); value = s.nextInt(); return value; } }
import java.util.Scanner; /* * 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 */ public class Test15 { public static void main(String[] args) { /* //方法一 Scanner in=new Scanner(System.in); System.out.println("请输入x的值:"); int x=in.nextInt(); System.out.println("请输入y的值:"); int y=in.nextInt(); System.out.println("请输入z的值:"); int z=in.nextInt(); System.out.println("原数值:"+x+","+y+","+z); int max=x>y?x:y;//判断最大值 max=max>z?max:z; int min=x<y?x:y;//判断最小值 min=min<z?min:z; int middle=0; if(max!=x&&min!=x){ middle=x; }else if(max!=y&&min!=y){ middle=y; }else if(max!=z&&min!=z){ middle=z; } System.out.println("排序后:"+min+","+middle+","+max); */ //方法二(冒泡排序) @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入x的值:"); int x=in.nextInt(); System.out.println("请输入y的值:"); int y=in.nextInt(); System.out.println("请输入z的值:"); int z=in.nextInt(); System.out.println("原数值:"+x+","+y+","+z); if(x>y){ int t=x; x=y; y=t; } if(x>z){ int t=x; x=z; z=t; } if(y>z){ int t=y; y=z; z=t; } System.out.println("排序后:"+x+","+y+","+z); } }
/* * 题目:输出9*9口诀。 */ public class Test16 { public static void main(String[] args) { for(int i=1;i<10;i++){ for(int j=1;j<i+1;j++){ System.out.print(j+"*"+i+"="+j*i+" "); /* *因为结果是两位数时会多出结果是一位数时一个字符长度,所以 *为了使排列美观,再在结果为一位数后加上一个字符长度 */ if(j*i<10){ System.out.print(" "); } } System.out.println(""); } } }
/* * 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还上 * 瘾,又多吃了一个, 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 * 以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃 * 时,见只剩下一个桃子了。求第一天共摘了多少。 * 分析:设第一天摘了x个。则有 * 第一天剩:x/2-1 * 第二天剩:(x/2-1)/2-1,前一天剩的等于后一天剩的加一乘以2 * .. * 第九天剩:1 * 一共吃了九天 */ public class Test17 { public static void main(String[] args) { int x=1; for(int i=0;i<9;i++){ x=(x+1)*2; } System.out.println("第一天共摘了"+x+"个"); } }
/* * 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五 * 份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩 * 下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了 * 一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? * 分析:假设原来有x个桃子 * 第一个猴子拿走了:(x-1)/5,剩下:x-(x-1)/5,剩下的一份是(x-(x-1)/5)/4; * 第二个猴子拿走了:(x-(x-1)/5-1)/5,剩下:x-(x-(x-1)/5-1)/5; * .. * .. * 第五个猴子时,第四个猴子剩下6,第五个猴子拿走了(6-1)/5,剩下4; * 也就是最少要剩4,这4个中一份是4/4,每一个剩下的数都是4的倍数 */ public class Test18 { public static void main(String[] args) { int t,count,x=0; for(int i=4;i<10000;i++){ count=1; t=i;//因为i进行内循环后会变化,所以先保存 for(int j=0;j<5;j++){ x=i/4*5+1; i=x; if(x%4==0){//判断每个猴子的操作是否成立 count++;//成立就加一 }else{ break;//不成立退出内循环 } } i=t;//把保存的i重新还回来 if(count==5){ System.out.println("原有桃子:"+x); break; } } } }
import java.util.Scanner; /* * 题目:打印出如下图案(菱形) * *** ***** ******* ***** *** * */ public class Test19 { public static void main(String[] args) { //高和宽必须为相等的奇数 int h=7,w=7; //前半段图形 //规律:1,3,5,7... for(int i=0;i<(h+1)/2;i++){ //每一行空出的 for(int j=0;j<w/2-i;j++){ System.out.print(" ");//空格符 } //每一行打印的 for(int k=1;k<(i+1)*2;k++){ System.out.print("*"); } System.out.println("");//空一行 } //后半段图形,少中间一行 //规律:...5,3,1 for(int i=0;i<h/2;i++){ //每一行空出的 for(int j=0;j<i+1;j++){ System.out.print(" ");//空格符 } //每一行打印的 for(int k=1;k<(h/2-i)*2;k++){ System.out.print("*"); } System.out.println("");//空一行 } //方法二:最少代码 @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入高:"); int h2=in.nextInt(); for(int i=1;i<=h2;i++){ int m=(i<=(h2+1)/2)?i:(h2+1-i); for(int k=(h2+1)/2-m;k>0;k--){ System.out.print(" "); } for(int j=1;j<m*2;j++){ System.out.print("*"); } System.out.println(); } } }
/* * 题目:打印出如下图案(三角形) * *** ***** ******* ********* */ public class Test20 { public static void main(String[] args) { for(int i=1;i<=5;i++){ //............. for(int j=1;j<2*i;j++){ System.out.print("*"); } System.out.println(); } } }
import java.util.Scanner; /** * for(起点;判定终点;步长) 明确起点,终点。 * 1. h=n; j<2*i k=h-i k>0 k-- 高度可变 i行 j* k空 * 1 1 4 *** 2 3 3 ***** 3 5 2 ******* 4 7 1 ********* 5 9 0 */ public class Test21 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.print("请输入三角形的高度:"); int h = in.nextInt(); for(int i=1;i<=h;i++){ for(int j=h-i;j>0;j--){ System.out.print(" "); } for(int j=1;j<2*i;j++){ System.out.print("*"); } System.out.println(); } } }
/* * 题目:求1+2!+3!+...+20!的和 */ public class Test22 { public static void main(String[] args) { new sum(); //普通方法 long sum=0; long flg=1; for(int i=1;i<=20;i++){ flg=flg*i; sum+=flg; } System.out.println("1+2!+3!+...+20!="+sum); } } //递归方法 class sum{ sum(){ long sum=0; for(int i=1;i<=20;i++){ sum+=fun(i); } System.out.println("1+2!+3!+...+20!="+sum); } long fun(int n){ if(n>1) return n*fun(n-1); return 1; } }
/* * 题目:利用递归方法求5!。 */ public class Test23 { public static void main(String[] args) { int n=5; Res res=new Res(); System.out.println(n+"!="+res.res(n)); } } class Res{ public long res(int n){ long value=0; if(n==1){ value=1; }else{ value=n*res(n-1); } return value; } }
import java.util.Scanner; /* * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 */ public class Test24 { public static void main(String[] args) { //逻辑方法 /* Scanner in=new Scanner(System.in); System.out.println("请输入一个5位或5位以下的正整数:"); int n=in.nextInt(); int one,two,three,four,five; if(n/10000>0){ one=n%10; two=(n/10)%10; three=(n/100)%10; four=(n/1000)%10; five=n/10000; System.out.println("它是5位数"); System.out.println(one+""+two+""+three+""+""+four+""+five); }else if(n/1000>0){ one=n%10; two=(n/10)%10; three=(n/100)%10; four=n/1000; System.out.println("它是4位数"); System.out.println(one+""+two+""+three+""+""+four); }else if(n/100>0){ one=n%10; two=(n/10)%10; three=n/100; System.out.println("它是3位数"); System.out.println(one+""+two+""+three); }else if(n/10>0){ one=n%10; two=n/10; System.out.println("它是2位数"); System.out.println(one+""+two); }else{ System.out.println("它是1位数"); System.out.println(n); } */ //长整型+数组方法(最高可输入18位) @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个正整数"); long n=in.nextLong(); String str=Long.toString(n); char[] ch=str.toCharArray(); int k=ch.length; System.out.println("它是一个"+k+"位数"); for(int i=k-1;i>=0;i--){ System.out.print(ch[i]); } } }
import java.util.Scanner; /** * 题目:输入一个数字 例如 123456 * 请输出: 654321 * 循环 1 2 * 123456 6 * 12345 5 * 1234 4 * 123 3 * 12 2 * 1 1 * 0 * num=num*10+余数 */ public class Test25 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner sc=new Scanner(System.in); System.out.println("请输入1个数字:"); int n=sc.nextInt(); int num=0;//最后输出的颠倒数 for(int i=n;i!=0; ){ int x=i%10;//求尾数 num=num*10+x; System.out.println("num="+num+ " i="+i+" x="+x); i/=10;//i=i/10; 减小数字 } System.out.println(n+"::::"+num); } }
import java.util.Scanner; /* * 题目:将一个数组逆序输出。 */ public class Test26 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); //方法二 System.out.println("输入多个整数(输入-1结束)"); int[] a=new int[20]; int i=0,j; do{ a[i]=in.nextInt(); i++; }while(a[i-1]!=-1); System.out.println("正序输出:"); for(j=0;j<i-1;j++){ System.out.print(a[j]+" "); } System.out.println(); System.out.println("逆序输出:"); /* * 循环结束时j等于i-1,而i-1对应的是-1, * 所以逆序输出j从i-2开始 */ for(j=i-2;j>=0;j--){ System.out.print(a[j]+" "); } //方法一 /* System.out.println("请定义数组的长度"); int[] arr=new int[in.nextInt()]; for(int i=0;i<arr.length;i++){ System.out.println("请输入第"+(i+1)+"个数"); arr[i]=in.nextInt(); } System.out.println("正序输出:"); for(int j=0;j<arr.length;j++){ System.out.print(arr[j]); } System.out.println(); System.out.println("逆序输出:"); for(int j=arr.length-1;j>=0;j--){ System.out.print(arr[j]); } */ } }
/* * 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三 * 位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙 * 花数 ",因为153=1的三次方+5的三次方+3的三次方。 */ public class Test27 { public static void main(String[] args) { int sum=0, one=0, two=0,three=0; for(int i=100;i<=999;i++){ one=i/100; two=(i%100)/10; three=i%10; sum=one*one*one+two*two*two+three*three*three; if(i==sum){ System.out.println(i+"是水仙花数"); } } } }
import java.util.Scanner; /* * 题目:对10个数进行排序 */ public class Test28 { //二分法插入排序 public static int[] BarnarySort(int[] data) { int[] temp=new int[data.length]; for(int i=0;i<temp.length;i++){ if(i==0){ temp[i]=data[i]; }else{ for(int j=0,k=i-1;j<i&&k>=0;){ if(temp[(j+k)/2]>=data[i]){ if((j+k)/2==0){ for(int iter=i;iter>0;iter--){ temp[iter]=temp[iter-1]; } temp[0]=data[i]; break; }else if(temp[(j+k)/2-1]<=data[i]){ for(int iter=i;iter>(j+k)/2;iter--){ temp[iter]=temp[iter-1]; } temp[(j+k)/2]=data[i]; break; }else{ k=(k+j)/2-1; } }else if(temp[(j+k)/2]<data[i]){ if((j+k)/2==i-1){ temp[i]=data[i]; break; }else{ j=(k+j)/2+1; } } } } } return temp; } public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入10个数:"); int[] num=new int[10]; for(int i=0;i<num.length;i++){ num[i]=in.nextInt(); } //选择排序 /* for(int i=0;i<num.length;i++){ for(int j=i+1;j<num.length;j++){ if(num[i]>num[j]){//升序 double t=num[i]; num[i]=num[j]; num[j]=t; } } } for(int i=0;i<num.length;i++){ System.out.print(num[i]+" "); } */ //冒泡排序 /* for(int i=0;i<num.length-1;i++){ for(int j=0;j<num.length-1-i;j++){ if(num[j]>num[j+1]){ double t=num[j]; num[j]=num[j+1]; num[j+1]=t; } } } for(int i=0;i<num.length;i++){ System.out.print(num[i]+" "); } */ //sort()方法 //Arrays.sort(num); int[] arr=BarnarySort(num); for(int i=0;i<num.length;i++){ System.out.print(arr[i]+" "); } } }
import java.util.Scanner; /* * 题目:求一个3*3矩阵对角线元素之和 */ public class Test29 { public static void main(String[] args) { double[][] a=new double[3][3]; @SuppressWarnings("resource") Scanner in=new Scanner(System.in); for(int i=0;i<3;i++){ System.out.println("请输入第"+(i+1)+"行元素"); for(int j=0;j<3;j++){ a[i][j]=in.nextDouble(); } } for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } double sum=0; sum=a[0][0]+a[1][1]+a[2][2]+a[0][2]+a[2][0]; System.out.println("对角线之和等于:"+sum); } }
import java.util.Scanner; /* * 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 */ public class Test30 { public static void main(String[] args) { int[] a={2,3,4,5,16,17,28,29}; int[] b=new int[a.length+1]; @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个数:"); int n=in.nextInt(); if(n>a[a.length-1]){ b[b.length-1]=n; for(int i=0;i<b.length-1;i++){ b[i]=a[i]; } }else if(n<a[0]){ b[0]=n; for(int i=0;i<a.length;i++){ b[i+1]=a[i]; } }else{ //方法一 int k; for(k=0;k<a.length;k++){ if(n>a[k]){ b[k]=a[k]; }else{ b[k]=n; break; } } for(int j=k+1;j<b.length;j++){ b[j]=a[j-1]; } //方法二,折半查找插入 /* int low=0; int high=a.length-1; int mid=0; while(low<=high){ mid=(low+high)/2; if(a[mid]>n){ high=mid-1; }else if(a[mid]<n){ low=mid+1; }else{ break; } } insert(a,b,a.length,mid,n); */ } for(int i=0;i<b.length;i++){ System.out.print(b[i]+" "); } } /* * 插入操作 * @param arr 已排序好的数组 * @param arrCopy插入后的数组 * @param lastIndex 排序好的数组的长度 * @param targetIndex 在第targetIndex个位置插入值,插入后下标为targetIndex * @param var 要插入的数 */ public static void insert(int[] arr,int[] arrCopy,int lastIndex,int targetIndex,int val){ for(int i=lastIndex;i>targetIndex;i--){ arrCopy[i]=arr[i-1]; } arrCopy[targetIndex]=val; for(int i=0;i<targetIndex;i++){ arrCopy[i]=arr[i]; } } }
import java.util.Scanner; /* * 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字 * 母一样,则继续判断第二个字母。 */ public class Test31 { /* * 方法一 public static Scanner in=new Scanner(System.in); public static String week; public static char ch; */ public static void main(String[] args) { /* * Monday 星期一 * Tuesday 星期二 * Wednesday 星期三 * Thursday 星期四 * Friday 星期五 * Saturday 星期六 * Sunday 星期日 */ /* * 方法一 System.out.println("请输入星期几的第一个字母:"); week=in.nextLine(); ch=week.charAt(0); if(ch=='M'){ System.out.println("星期一"); }else if(ch=='T'){ System.out.println("请输入星期几的第二个字母:"); week=in.nextLine(); ch=week.charAt(0); if(ch=='u'){ System.out.println("星期二"); }else if(ch=='h'){ System.out.println("星期四"); } }else if(ch=='W'){ System.out.println("星期三"); }else if(ch=='F'){ System.out.println("星期五"); }else if(ch=='S'){ System.out.println("请输入星期几的第二个字母:"); week=in.nextLine(); ch=week.charAt(0); if(ch=='a'){ System.out.println("星期六"); }else if(ch=='u'){ System.out.println("星期六"); } } */ //方法二 getChar tw = new getChar(); System.out.println("请输入星期的第一个大写字母:"); char ch = tw.get(); switch(ch){ case 'M': System.out.println("Monday"); break; case 'W': System.out.println("Wednesday"); break; case 'F': System.out.println("Friday"); break; case 'T': System.out.println("请输入星期的第二个字母:"); char ch2 = tw.get(); if(ch2=='U'){ System.out.println("Tuesday"); }else if(ch2=='H'){ System.out.println("Thursday"); }else{ System.out.println("无此写法!"); } break; case 'S': System.out.println("请输入星期的第二个字母:"); char ch3 = tw.get(); if(ch3=='A'){ System.out.println("Saturday"); }else if(ch3=='U'){ System.out.println("Sunday"); }else{ System.out.println("无此写法!"); } break; default:System.out.println("无此写法!"); } } } class getChar{ public char get(){ @SuppressWarnings("resource") Scanner s = new Scanner(System.in); String str = s.nextLine(); char ch = str.charAt(0); if(ch<'A' || ch>'Z'){ System.out.println("输入错误,请重新输入"); ch=get(); } return ch; } }
import java.util.Scanner; /* * 题目:取一个整数a从右端开始的4~7位。 */ public class Test32 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个七位以上的整数:"); long num=in.nextLong(); String str=Long.toString(num); char[] ch=str.toCharArray(); int k=4; int n=ch.length; if (n<7) { System.out.println("输入错误"); }else{ for(int i=n-1;i>n-4-1;i--){ System.out.println("第"+k+"位"+ch[i-3]); k++; } System.out.println("截取从右端开始的4~7位是:"+ch[n-7]+ch[n-6]+ch[n-5]+ch[n-4]); } } }
/* * 题目:打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ………… */ public class Test33 { public static void main(String[] args) { int[][] a=new int[10][10]; for(int i=0;i<10;i++){ a[i][i]=1; a[i][0]=1; } for(int i=2;i<10;i++){ for(int j=1;j<i;j++){ a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(int i=0;i<10;i++){ for(int j=0;j<2*(10-i)-1;j++){ System.out.print(" "); } for(int j=0;j<=i;j++){ System.out.print(a[i][j]+" "); } System.out.println(); } } }
import java.util.Scanner; /* * 题目:输入3个数a,b,c,按大小顺序输出。 */ public class Test34 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入a的值:"); int a=in.nextInt(); System.out.println("请输入b的值:"); int b=in.nextInt(); System.out.println("请输入c的值:"); int c=in.nextInt(); int max,min,mid = 0; //方法一 /* max=(a>b?a:b)>c?(a>b?a:b):c; min=(a<b?a:b)<c?(a<b?a:b):c; if(a!=max&&a!=min){ mid=a; }else if(b!=max&&b!=min){ mid=b; }else if(c!=max&&c!=min){ mid=c; } */ //方法二,类似于数组的冒泡排序 if(a>b){ int t=a; a=b; b=t; } if(a>c){ int t=a; a=c; c=t; } if(b>c){ int t=b; b=c; c=t; } min=a; mid=b; max=c; System.out.println("从小到大输出:"+min+" "+mid+" "+max); System.out.println("从大到小输出:"+max+" "+mid+" 1"+min); } }
/* * 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 */ public class Test35 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入数组的长度"); int len=in.nextInt(); int[] arr=new int[len]; for(int i=0;i<len;i++){ System.out.println("请输入第"+(i+1)+"个数"); arr[i]=in.nextInt(); } System.out.println("原数组:"); for(int i=0;i<len;i++){ System.out.print(arr[i]+" "); } /* * 方法一,这个方法有个缺点,就是输入的最大值不能小于定义的的最大值 * 输入的最小值不能大于定义的最小值 */ int max=0,min=999999; //找出最大值 for(int i=0;i<len;i++){ max=max>arr[i]?max:arr[i]; } //找出最小值 for(int i=0;i<len;i++){ min=min<arr[i]?min:arr[i]; } //交换过程 for(int i=0;i<len;i++){ if(max==arr[i]){ arr[i]=arr[0]; arr[0]=max; } if(min==arr[i]){ arr[i]=arr[len-1]; arr[len-1]=min; } } /* //方法二 int maxTargetIndex=0,minTargetIndex=0; int max=arr[0],min=arr[len-1]; for(int i=0;i<len;i++){ if(arr[i]>max){ max=arr[i]; maxTargetIndex=i; } if(arr[i]<=min){ min=arr[i]; minTargetIndex=i; } } if(maxTargetIndex==(len-1)&&minTargetIndex==0){ int temp=arr[0]; arr[0]=arr[len-1]; arr[len-1]=temp; }else{ if(maxTargetIndex!=0){ int temp=arr[0]; arr[0]=arr[maxTargetIndex]; arr[maxTargetIndex]=temp; } if(minTargetIndex!=(len-1)){ int temp=arr[len-1]; arr[len-1]=arr[minTargetIndex]; arr[minTargetIndex]=temp; } } */ System.out.println(); System.out.println("交换后数组:"); for(int i=0;i<len;i++){ System.out.print(arr[i]+" "); } } }
import java.util.Scanner; /* * 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 */ public class Test36 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入n:"); int n=in.nextInt(); int m; do{ System.out.println("请输入m(m<n):"); m=in.nextInt(); }while(n<m); int[] arr=new int[n]; int[] arrCopy=new int[n]; for(int i=0;i<n;i++){ System.out.println("请输入第"+(i+1)+"个数"); arr[i]=in.nextInt(); } System.out.println("原数为:"); for(int i=0;i<n;i++){ System.out.print(arr[i]+" "); } System.out.println(); for(int i=0;i<n-m;i++){ arrCopy[i+m]=arr[i]; } int k=0; for(int i=m-1;i>=0;i--){ arrCopy[i]=arr[n-1-k]; k++; } System.out.println("移动后的数为:"); for(int i=0;i<n;i++){ System.out.print(arrCopy[i]+" "); } } }
/* * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 * 数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 */ public class Test37 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入围成圈的人数,最少2人"); int n=in.nextInt(); boolean[] arr=new boolean[n]; for(int i=0;i<arr.length;i++){ arr[i]=true; } int leftNum=n; int num=0; int index=0; while(leftNum>1){ if(arr[index]==true){ num++; } if(num==3){ arr[index]=false; num=0; leftNum--; } index++; if(index==n){ index=0; } } for(int i=0;i<arr.length;i++){ if(arr[i]==true){ System.out.println("最后留下的是第"+(i+1)+"号"); } } } }
import java.util.Scanner; /* * 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并 * 输出其长度。(不能用length()函数) */ public class Test38 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个字符串:"); String str=in.nextLine(); int l=len(str); System.out.println("字符串的长度为:"+l); //length()函数 System.out.println("字符串的长度为:"+str.length()); } //求长度的方法,即函数 static int len(String str){ char[] ch=str.toCharArray(); int k=0; for(int i=0;i<ch.length;i++){ k++; } return k; } }
import java.util.Scanner; /* * 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当 * 输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) */ public class Test39 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in = new Scanner(System.in); System.out.println("请输入一个数"); int n = in.nextInt(); System.out.println(sum(n)); } static double sum(int n) { double sum = 0; if (n % 2 == 0) { for (int i = 2; i <= n; i += 2) { sum += (double) 1 / i; } } else { for (int i = 1; i <= n; i += 2) { sum += (double) 1 / i; } } return sum; } }
import java.util.Arrays; import java.util.Scanner; /* * 题目:字符串排序。 */ public class Test40 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in = new Scanner(System.in); System.out.println("请输入一个字符串"); String str=in.nextLine(); char[] ch=str.toCharArray(); Arrays.sort(ch); for(int i=0;i<ch.length;i++){ System.out.println(ch[i]); } } }
/* * 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙 * 队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名 * 单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 */ public class Test41 { public static void main(String[] args) { char[] m={'a','b','c'}; char[] n={'x','y','z'}; for(int i=0;i<m.length;i++){ for(int j=0;j<n.length;j++){ if(m[i]=='a'&&n[j]=='x'||m[i]=='a'&&n[j]=='y'){ continue; }else if(m[i]=='c'&&n[j]=='x'||m[i]=='c'&&n[j]=='z'){ continue; }else if(m[i]=='b'&&n[j]=='y'||m[i]=='b'&&n[j]=='z'){ continue; }else{ System.out.println(m[i]+" VS "+n[j]); } } } } }
/* * 题目:809*??=800*??+9*?? 其中??代表的两位数,8*??的结果 * 为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 */ public class Test42 { public static void main(String[] args) { int x=0; for(int i=10;i<13;i++){ x=(8*i<100&&9*i>99)?i:x; if(x!=0){ String str=800+"*"+x+"="+800+"*"+x+"+"+9+"*"+x; System.out.println(str+"="+809*x); } } } }
/* * 题目:求0—7所能组成的奇数个数。 * 分析: * 组成1位数是4个。 * 组成2位数是7*4个。 * 组成3位数是7*8*4个。 * 组成4位数是7*8*8*4个。 * ... */ public class Test43 { public static void main(String[] args) { int x=4,sum=0; System.out.println("组成1位数是:"+x); sum+=x; x*=7; sum+=x; System.out.println("组成2位数是:"+x); for(int i=3;i<=7;i++){//重第三位开始,每多一位就乘以8 System.out.println("组成"+i+"位数是:"+(x*=8)); sum+=x; } System.out.println("0—7所能组成的奇数个数为:"+sum); } }
import java.util.Scanner; /* * 题目:一个偶数总能表示为两个素数之和。 * 分析: * 由于用除sqrt(n)的方法求出的素数不包括2和3, * 因此在判断是否是素数程序中人为添加了一个3。 */ public class Test44 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); int x; do{ System.out.println("请输入一个大于或等于6偶数"); x=in.nextInt(); }while(x<6||x%2!=0); for(int i=2;i<10000;i++){ if(getSu(i)==true&&getSu(x-i)==true){ System.out.println(x+"="+i+"+"+(x-i)); } } } /** * 求素数 * @param num传入的数 int类型 * @return flag返回值,boolean类型,如果是素数返回true,不是返回false */ public static boolean getSu(int num) { boolean flag = false; if(num==2||num==3) flag = true; for(int i=2;i<=Math.sqrt(num);i++){ if(num%i==0){ flag=false; break; }else{ flag=true; } } return flag; } }
import java.util.Scanner; /* * 题目:判断一个数能被几个9整除 */ public class Test45 { @SuppressWarnings("unused") public static void main(String[] args) { int t,count=0; boolean bl=true; @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个数字"); int x=in.nextInt(); t=x; //方法一 do{ if(x%9==0){ x/=9; count++; }else{ bl=false; } }while(bl); x=t; System.out.println(x+"能被"+count+"个9整除"); //方法二 count=0; for(int i=0;x%9==0;){ x = x/9; count ++; } x=t; System.out.println(x+"能被"+count+"个9整除"); } }
import java.util.Scanner; /* * 题目:两个字符串连接程序 */ public class Test46 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入第一个字符串:"); String str1=in.nextLine(); System.out.println("请输入第二个字符串:"); String str2=in.nextLine(); String str=str1+str2; System.out.println("第一个字符串为:"+str1); System.out.println("第二个字符串为:"+str2); System.out.println("连接后的字符串为:"+str); } }
/* * 题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的(用*表示)。 */ public class Test47 { public static void main(String[] args) { //方法一 for(int i=0;i<7;i++){ int num=(int)(Math.random()*50+1); System.out.println(num); for(int j=0;j<num;j++){ System.out.print("*"); } System.out.println(); } //方法二 @SuppressWarnings("resource") Scanner s = new Scanner(System.in); int n = 1, num; while (n <= 7) { do { System.out.print("请输入一个1--50之间的整数:"); num = s.nextInt(); } while (num < 1 || num > 50); for (int i = 1; i <= num; i++) { System.out.print("*"); } System.out.println(); n++; } } }
import java.util.Scanner; /* * 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中 * 是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替 * 该数字,再将第一位和第四位交换,第二位和第三位交换。 */ public class Test48 { public static void main(String[] args) { /*//方法一 Scanner in=new Scanner(System.in); System.out.println("请输入一个四位数的整数:"); int num1=in.nextInt(); int one=(num1%10+5)%10; int two=(num1/10%10+5)%10; int three=(num1/100%10+5)%10; int four=(num1/1000+5)%10; int result=one*1000+two*100+three*10+four; System.out.println("加密前:"+num1); System.out.println("加密后:"+result);*/ //方法二 @SuppressWarnings("resource") Scanner s = new Scanner(System.in); int num2 = 0, temp; do { System.out.print("请输入一个4位正整数:"); num2 = s.nextInt(); } while (num2 < 1000 || num2 > 9999); int a[] = new int[4]; a[0] = num2 / 1000; // 取千位的数字 a[1] = (num2 / 100) % 10; // 取百位的数字 a[2] = (num2 / 10) % 10; // 取十位的数字 a[3] = num2 % 10; // 取个位的数字 for (int j = 0; j < 4; j++) { a[j] += 5; a[j] %= 10; } for (int j = 0; j <= 1; j++) { temp = a[j]; a[j] = a[3 - j]; a[3 - j] = temp; } System.out.print("加密后的数字为:"); for (int j = 0; j < 4; j++) System.out.print(a[j]); } }
import java.util.Scanner; /* * 题目:计算字符串中子串出现的次数 */ public class Test49 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.println("请输入一个字符串:"); String str=in.nextLine(); System.out.println("请输入子串:"); String strZ=in.nextLine(); int count=0; if(str.equals("")||str.equals("")){ System.out.println("字符串或子串为空,无法进行比较"); System.exit(0); }else{ for(int i=0;i<=str.length()-strZ.length();i++){ //这种比法有问题,会把"aaa"看成有2个"aa"子串。 if(strZ.equals(str.substring(i, strZ.length()+i))){ count++; } } System.out.println("子串在母串中出现的次数为:"+count); } } }
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Scanner; /* * 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生 * 号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数 * 存放在磁盘文件 "stud "中。 */ public class Test50 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); String [][] strArr=new String[5][6]; double sum=0;//总成绩 for(int i=1;i<=5;i++){ System.out.println("请输入第"+i+"个学生的学号"); strArr[i-1][0]=in.nextLine(); System.out.println("请输入第"+i+"个学生的姓名"); strArr[i-1][1]=in.nextLine(); for(int j=1;j<=3;j++){ System.out.println("请输入第"+i+"个学生的第"+j+"门成绩"); strArr[i-1][j+1]=in.nextLine(); double d=Double.valueOf(strArr[i-1][j+1]) .doubleValue(); sum+=d; } sum=sum/3;//平均分 strArr[i-1][5]=""+sum; sum=0; System.out.println(); } String str="学号\t"+"姓名\t"+"成绩一\t"+"成绩二\t"+"成绩三\t"+"平均分\t"; System.out.println(str); for(int i=0;i<5;i++){ for(int j=0;j<6;j++){ System.out.print(strArr[i][j]+"\t"); } System.out.println(); } // 以下写磁盘文件 String s1; try { File f = new File("E:\\stud.txt"); if (f.exists()) { System.out.println("文件存在"); } else { System.out.println("文件不存在,正在创建文件"); f.createNewFile();// 不存在则创建 } BufferedWriter output = new BufferedWriter(new FileWriter(f)); for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { s1 = strArr[i][j] + "\r\n"; output.write(s1); } } output.close(); System.out.println("数据已写入c盘文件stud中!"); } catch (Exception e) { e.printStackTrace(); } } }
import java.util.Random; import java.util.Scanner; /** * 题目: 猜价格获取商品程序 * * 知识点: * for有2种死亡(停止)方式 * 1.夭折,for没有正常循环完成,而中间出现情况结束 ,i的值还是符合 for的 终点判定 * 2.寿终正寝,for循环啦每1次,一直到 终点判定不符合,而退出。i的值不符合for的 终点判定 * Math.random() 产生一个 0-1的double */ public class Test51 { @SuppressWarnings("resource") public static void main(String[] args) { //1.准备数据 Scanner sc = new Scanner(System.in); System.out.println("猜价格游戏准备开始"); //int num= (int)(Math.random()*101); Random random=new Random(); int num=random.nextInt(1001);//商品价格 //运算和流程处理 int i=1; for(;i<=10;i++){ System.out.println("请猜第"+i+"次:"); int x=sc.nextInt();//接收 if(x==num){ System.out.println("猜对啦,商品拿回去"); break; }else if(x<num){ System.out.println("小啦,请大点。"); }else{ System.out.println("大啦,请小点."); } } if(i>10) System.out.println("你out啦"); System.out.println("商品的价格为:"+num); } }
import java.util.Scanner; /* *题目: 请输出1到m内n的倍数和含有n的数字 * */ public class Test52 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); System.out.print("请输入n:"); int n = in.nextInt(); System.out.print("请输入m:"); int m = in.nextInt(); for(int i=1;i<=m ;i++) { if(i%n==0 || i%10==n ||i/10==n){ System.out.println(i); } } } }
import java.util.Scanner; /* * 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万 * 位相同,十位与千位相同。 */ public class Test53 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner in=new Scanner(System.in); //方法一 System.out.println("请输入一个5位数:"); int n=in.nextInt(); int one,two,four,five; one=n%10; two=(n/10)%10; four=(n/1000)%10; five=n/10000; if(one==five&&two==four){ System.out.println("这是一个回文数"); }else{ System.out.println("这不是一个回文数"); } //方法二 int n2; do{ System.out.println("请输入一个5位数:"); n2=in.nextInt(); }while(n2>99999||n2<10000); String str=String.valueOf(n2); char[] ch2=str.toCharArray(); if(ch2[0]==ch2[4]&&ch2[1]==ch2[3]){ System.out.println("这是一个回文数"); }else{ System.out.println("这不是一个回文数"); } //不限位数 boolean is=true; System.out.println("请输入一个正整数:"); long a=in.nextLong(); String s=Long.toString(a); char[] c=s.toCharArray(); int k=c.length; for(int i=0;i<k/2;i++){ if(c[i]!=c[k-i-1]){ is=false; } } if(is==true){ System.out.println("这是一个回文数"); }else{ System.out.println("这不是一个回文数"); } } }
/*
* 题目:一个正整数,它加上100后是一个完全平方数,再
* 加上168又是一个完全平方数,请问该数是多少?
*/
public class Test54 {
public static void main(String[] args){
for(int i=1;i<10000;i++){
if(Math.sqrt(i+100)%1==0){
if(Math.sqrt(i+168)%1==0){
System.out.println("该数是"+i);
}
}
}
}
}
/**
* 年复一年,天复一天;
* 循环嵌套中:外围循环 1次; 内围循环N次
*/
public class Test55 {
public static void main(String[] args) {
for(int i=1;i<=4;i++){//4年
System.out.println("年复一年="+i);
for(int j=1;j<=12;j++){//外围和内围循环有包含关系。
System.out.println("月复一月="+i+":"+j);
}
}
}
}
/* * 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的 * 前20项之和。 * 分析:分子 2,3,5,8,13,21,... * 分母 1,2,3,5,8,13,... * 一、分子分母的前两项之和等于后一项(该分析用于数组) * 二、前一项的分子加上分母等于后一项的分子,前一项的分子等于后一项的分母(该分析用于 * 非数组) */ public class Test56 { public static void main(String[] args) { //方法一,用数组 int[] m=new int[20]; m[0]=2; m[1]=3; for(int i=2;i<m.length;i++){ m[i]=m[i-1]+m[i-2]; } int[] n=new int[20]; n[0]=1; n[1]=2; for(int i=2;i<n.length;i++){ n[i]=n[i-1]+n[i-2]; } double sum=0; for(int i=0;i<m.length;i++){ sum+=(double)m[i]/n[i]; } System.out.println("前20项之和等于:"+sum); //方法二,非数组 int x=2,y=1,t; double sum2=0; for(int i=0;i<20;i++){ sum2=sum2+(double)x/y; t=y; y=x; x=y+t; } System.out.println("前20项之和等于:"+sum2); } }
/*
* 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问
* 第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。
* 问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问
* 第五个人多大?
*/
public class Test57 {
public static void main(String[] args) {
int age=10;
for(int i=2;i<=5;i++){
age+=2;
}
System.out.println("第五个人"+age+"岁");
}
}
import java.util.Arrays; import java.util.Random; /** * 验证码 * 如何能自动生成 4位含中文, 英文 或者字母的验证码,要求:不可以重复 */ public class Test58 { public static void main(String[] args) { char [] arrx={'a','b','c','d','e','f'}; char [] arry=new char[4];//用于装验证码的 Random ran=new Random(); System.out.println(Arrays.toString(arrx)); for(int i=0;i<arry.length;i++){ //获取 arrx长度的下标 int index=ran.nextInt(arrx.length-i); //交换数据-保存数据 arry[i]=arrx[index]; //交换数据-当前arrx中的index 和目前能随机的最大下标数 交换 arrx[index]=arrx[arrx.length-1-i]; arrx[arrx.length-1-i]=arry[i]; // System.out.println("第"+(i+1)+"次:i="+i+" index:"+index); // System.out.println("当前最大的随机数:"+(arrx.length-1-i)); // System.out.println("arrx:"+Arrays.toString(arrx)); // System.out.println("arry:"+Arrays.toString(arry)); // System.out.println(); } System.out.println(Arrays.toString(arrx)); System.out.println(Arrays.toString(arry)); } }
import java.util.Scanner; /** * 要求: 请输入: 数字 运算符 数字 * 通过运算符 char c =‘+’ c=='+' * 计算出 运算结果: 数字运算符数字=结果 3*5=15 * i+"="+num * + - * / % 您的运算符还在开发中。 */ public class Test59 { public static void main(String[] args) { //1.准备数据 @SuppressWarnings("resource") Scanner sc=new Scanner(System.in); System.out.println("请您输入: 数字 运算符 数字"); int x=sc.nextInt();//接受第1个数字 char ysf=sc.next().charAt(0);//接收运算符 int y=sc.nextInt();//接受第2个数字 String s=""+x+ysf+y+"=";//数字运算符数字= //2.计算结果 if(ysf =='+'){ // int z=x+y; // s=s+z; s+=z; s+=x+y; }else if(ysf == '/'){ if(y==0) s="除数不可以为零"; else s+=x/y; } //........else if(){} ...... else{ s="您的运算符还在开发中,请联系:******"; } //3.输出结果 System.out.println(s); } }
import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * 要求实现: 购买商品方法 控制台输入: 商品名字 数量 * 查询商品方法 控制台输入: 商品名字 或者是 all * 删除商品方法 控制台输入: 商品名字 * 要求: * 通过控制台输入的方式 来实现 商品的管理 */ public class Test60 { private Map<String,Integer> map; public Test60(){ map=new HashMap<String,Integer>(); } /** * 购买商品,通过MAP进行商品的管理 * @param s 商品名称,也是 key * @param num 商品数量 也是 vlaue * @return 当前商品的总数量 */ public int buy(String s, int num) { if(map.get(s)!=null) { map.put(s, map.get(s)+num); }else { map.put(s, num); } return num; } public Map<String,Integer> getList(){ return map; } public int del(String name) { if(map.remove(name)==null) { return 0; } return 1; } @SuppressWarnings("resource") public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请您购物:商品随便写"); Test60 t=new Test60(); boolean bl=true; while(bl){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1.购买商品: 商品名字 数量"); System.out.println("2.查询商品: 商品名字 or all"); System.out.println("3.删除商品: 商品名字"); System.out.println("4.去结账"); System.out.println("请您输入编号:1 or 2 or 3 or 4"); int x=sc.nextInt(); switch(x){ case 1: System.out.println("请输入购买的 商品名字 数量:"); String s=sc.next(); int num=sc.nextInt(); int buynum=t.buy(s,num);/**********/ System.out.println("购买成功:您购买"+s+":"+buynum+"件"); break; case 2: System.out.println("请输入商品名字 or all:"); String name =sc.next(); Map<String, Integer> list = t.getList(); System.out.println("商品名字\t\t\t数量"); if("all".equals(name)) { for(Map.Entry<String, Integer> m:list.entrySet()) { System.out.println(m.getKey()+"\t\t\t"+m.getValue()); } if(list.size()==0) { System.out.println("您没有购买任何商品"); } }else { boolean noHas = true; for(Map.Entry<String, Integer> m:list.entrySet()) { if(m.getKey().contains(name)) { noHas = false; System.out.println(m.getKey()+"\t\t\t"+m.getValue()); } } if(noHas) { System.out.println("您没有购买这个商品"); } } break; case 3: System.out.println("请输入要删除的商品名字 "); String delName=sc.next(); if(t.del(delName)==1) { System.out.println("删除成功"); }else { System.out.println("没有这个商品"); } break; case 4: System.out.println("感谢您的使用:请微信支付"); bl=false; break; } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。