【程序 1】
题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列 1,1,2,3,5,8,13,21....
// 兔子问题--抓住第n个月的总数为前两个月总数的和
public void rabbit() {
int sum = 0;
int month = 1;
int temp1 = 1;// 前第一个月
int temp2 = 1;// 前第二个月
Scanner scan = new Scanner(System.in);
System.out.print("请输入第几个月:");
month = scan.nextInt();
for (int i = 1; i <= month; i++) {
if (i <= 2) {
sum = 1;
} else {
sum = temp1 + temp2;
temp1 = temp2;
temp2 = sum;
}
}
System.out.println("第" + month + "个月兔子总数:" + sum);
}
【程序 2】
题目:判断 101-200 之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
// 质数--抓住质数的特点(只能被1和它本身整除的数)
public void prime() {
int c = 0;
System.out.print("素数有:");
for (int i = 101; i <= 200; i++) {
for (int j = 2; j <= i; j++) {
if (i % j == 0 && i == j) {
c++;
System.out.print(i + ",");
} else if (i % j == 0 && i != j)
break;
}
}
System.out.println("101-200 之间有:" + c + "个素数");
}
【程序 3】
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个 "水仙花数 ",因为 153=1 的三次方+5 的三次方+3 的三次方。
1.程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。
// 水仙花数--特点(一个三位数,其各位数的立方和等于它本身的值。分解值的个位、十位和百位)
// @Test
public void daffodil() {
int i, j = 0, k;
int bai, shi, ge;
for (i = 100; i < 1000; i++) {
bai = i / 100;// 求百位数
shi = (i / 10) % 10;// 求十位数
ge = (i % 100) % 10;// 求个位数
k = bai * bai * bai + shi * shi * shi + ge * ge * ge;
if (i == k) {
System.out.println(i);
j++;
}
}
System.out.println("符合条件的水仙花数为:" + j);
}
【程序 4】
题目:将一个正整数分解质因数。例如:输入 90,打印出 90=2*3*3*5。
程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:
(1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果 n <> k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数你 n,重复执行第一步。
(3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。
// 质因数--
@Test
public void primeFactors() {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个数:");
int b = scan.nextInt();
int a = b; //保存原数
int age[] = new int[50];
int j=0;
for(int i=2;b!=1;){
if(b%i==0){
b = b/i;
age[j] = i;
j++;
}else{
i++;
}
}
System.out.println(a+"=");
for(int i=0;i<j;i++){
System.out.print(age[i]);
if(i<j-1){
System.out.print("*");
}
}
}
【程序 5】
题目:利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示。
1.程序分析:(a> b)?a:b 这是条件运算符的基本例子。
//三目运算嵌套
@Test
public void ternary(){
Scanner s = new Scanner(System.in);
System.out.println("请输入一个分数");
int score = s.nextInt();
String str =score>89==true?"A":(score<60==true?"C":"B");
System.out.println("该分数是:"+str);
}
【程序 6】
题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。 import java.util.Scanner; public class timu6 {
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a, b;
System.out.println("请输入两个整数:"); a = sc.nextInt();
b = sc.nextInt();
System.out.println("您输入的数是:" + a + " 和 " + b); int age[] = new int[(a + b) / 2];
int j = 0;
for (int i = 1; i < (a + b) / 2; i++) { if (a % i == 0 && b % i == 0) {
age[j] = i; j++;
}
}
System.out.println("最大公约数是:" + age[--j]); for (int k = 1; k < 100000; k++) {
if (k % a == 0 && k % b == 0) { System.out.println("最小公倍数是:" + k); break;
}
}
}
}
【程序 7】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用 while 语句,条件为输入的字符不为 '\n '.
//识别字符的类别--Character类用于识别字符类型
@Test
public void judge(){
Scanner s = new Scanner(System.in);
System.out.println("请输入一串字符:");
String str = s.nextLine();
char[] sca = str.toCharArray();
int numberCount = 0;
int letterCount = 0;
int spaceCount = 0;
int otherCount = 0;
for(int i=0;i<sca.length;i++){
if(Character.isLetter(sca[i])){
letterCount++;
}else if(Character.isSpaceChar(sca[i])){
spaceCount++;
}else if(Character.isDigit(sca[i])){
numberCount++;
}else{
otherCount++;
}
}
}
【程序 8】
题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此
时共有 5 个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。
public void calc(){
Scanner s = new Scanner(System.in);
System.out.println("请输入多少个a相加");
int i = s.nextInt();//加到几位数
int a = s.nextInt();//
int b = a; //保留原数
int sum = 0;
for(int j=1;j<=i;j++){
sum += a;
System.out.print(a);
if(j!=i-1){
System.out.print("+");
}
a = a*10+b; //后一个数等于前一个数*10+原数a
}
System.out.print("="+sum);
}
【程序 9】
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=1+2+3.编程
找出 1000 以内的所有完数。
解题思路:完数注意点(1.首先相加的数能被它整除;2.被它整除的数相加之和与它相等;3.不包括它自身)
public class timu9 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 1000; i++) {
int a = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0)
a += j;
}
if (a == i) {
System.out.println(a);
sum++;
}
}
System.out.println("共有完数:" + sum);
}
}
【程序 10】
题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第
10 次落地时,共经过多少米?第 10 次反弹多高?
Scanner s = new Scanner(System.in);
System.out.println("想求第几次反弹的高度:");
int n = s.nextInt();
double h = 100; //原高度
double sum =100;
for(int i=1;i<=n;i++){
h = h/2;
sum += 2*h;
if(i==n){
sum -= 2*h;
}
}
System.out.println("第"+n+"次落地经过的总高度是"+sum);
System.out.println("第"+n+"次反弹高度是"+h);
【程序 11】有1,2,3,4几个数字,能组成多少个不互不相同且无重复数字三位数,都是多少?
程序分析: 这几个均可填在百位、十位、个位,并且不互不相同且无重复数字三位数
int[] arr = {1,2,3,4};
int sum = 0;
int number = 0;
for(int i=0;i<4;i++){
sum=0;
sum += arr[i]*100;
for(int j=0;j<4;j++){
if(arr[i]==arr[j]){
continue;
}else{
sum += arr[j]*10;
for(int k=0;k<4;k++){
if(arr[k]==arr[i] || arr[k]==arr[j]){
continue;
}else{
sum+=arr[k];
number++;
System.out.println("组成的互不相同且无重复数字的三位数有:"+sum);
}
}
}
}
}
System.out.println("共有三位数"+number);
【程序 12】
public void bonus(){
Scanner scan = new Scanner(System.in);
double profit = scan.nextLong();
double bonus = 0;
double b = profit;
if(b<=100000){
bonus = b*0.1;
}else if(b<=200000){
bonus = 100000*0.1+(b-100000)*0.075;
}else if(b<=400000){
bonus = 100000*0.1+100000*0.075+(b-200000)*0.05;
}else if(b<=600000){
bonus = 100000*0.1+100000*0.075+200000*0.05+(b-400000)*0.03;
}else if(b<=1000000){
bonus = 100000*0.1+100000*0.075+200000*0.05+200000*0.03+(b-600000)*0.015;
}else{
bonus = 100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(b-1000000)*0.01;
}
System.out.println("当利润是"+b+"时,奖金是:"+bonus);
}
【程序 13】
int a=1;
for(int i=0;i<100000;i++){
a++;
for(int j=1;j<a+100;j++){
if(Math.sqrt(a+100)==j){
for(int k=1;k<a+268;k++){
if(Math.sqrt(a+268)==k){
System.out.println("这个数是:"+a);
}
}
}
}
}
【程序 14】
某年某月某日是本年中的第几天--计算的月份要少一月,闰年,单双月
程序分析:也可用switch来做
public void decide(){
Scanner scan = new Scanner(System.in);
System.out.print("请输入年份:");
int y = scan.nextInt();
System.out.print("请输入月份:");
int m = scan.nextInt();
System.out.print("请输入号数:");
int d = scan.nextInt();
System.out.println("输入的日期是:"+y+"年"+m+"月"+d+"日");
int n = d;//第n天
boolean tag = ((y%4==0&&y%100!=0) ||y%400==0)==true?true:false;
for(int i=1;i<m;i++){
if(i<=7){
if(i==2){
n += tag==true?29:28;
}else{
n += (i%2==0)==true?30:31;
}
}else{
n += (i%2==0)==true?31:30;
}
}
System.out.println("这是"+y+"的第"+n+"天");
}
【程序 15】
输入x,y,z三个数,从小到大输出。
程序分析:交换、冒泡
Scanner scan = new Scanner(System.in);
System.out.print("请输入三个数:");
int y = scan.nextInt(); //最小值
int m = scan.nextInt();
int d = scan.nextInt();
int temp;
//System.out.println("输入的三个数是:"+y+","+m+","+d);
if(y>m){
temp = y;
y = m;
m = temp;
}
if(y>d){
temp = d;
d = y;
y = temp;
}
if(m>d){
temp = d;
d = m;
m = temp;
}
System.out.println("三个数从小到大分别是:"+y+","+m+","+d);
【程序 16】
输出9*9口诀
程序分析:i,j相等时输出
public void test1(){
for(int i=1;i<=9;i++){
for(int j=i;j<=9;j++){
if(j==i){
System.out.println(i+"*"+j+"="+i*j);
}else{
continue;
}
}
}
}
【程序 17】
public void monkeyEat(){
int b = 1;//每天桃子的总数
int c = 0;
for(int i=9;i>0;i--){
b = (b+1)*2;
c = b/2+1;
System.out.print("第"+i+"天共摘了"+b+"个桃子");
System.out.print("第"+i+"共吃了"+c+"个桃子");
System.out.println( );
}
}
【程序 18】
程序分析:前四行一个规律,后三行一个规律。用双重for循环,外层控制行,内层控制列。
int m=-2;
for(int i=0;i<7;i++){
if(i<4){
if(i%2==0){
m = m+3;
}else{
m = m+2;
}
}else{
if(i%2==0){
m = m-2;
}else{
m = m-3;
}
}
for(int j=1;j<=m;j++){
System.out.print("*");
}
System.out.println();
}
【程序 19】
public void getSum(){
double sum=0;//20项之和
double fz =2;//分子
double fm = 1;//分母
double temp;
System.out.println("前20项和:");
for(int i=1;i<=20;i++){
System.out.print(fz+"/"+fm);
sum+=fz/fm;
temp = fz+fm;
fm = fz;
fz = temp;
if(i!=20){
System.out.print("+");
}
}
System.out.println("="+sum);
}
【程序 20】
public void factorial(){
int sum = 0;
for(int i=1;i<=3;i++){
int s =1;
for(int j=1;j<=i;j++){
s=s*j;
}
sum+=s;
}
System.out.println(sum);
}
【程序 21】
@Test
public void factorial1(){
System.out.println("5的阶乘:"+recursion(5));
}
//递归算法
public double recursion(int n){
if(n==1) return 1;
return recursion(n-1)*n;
}
【程序 22】
public void age(){
int age = 10;
for(int i=1;i<5;i++){
age = age+2;
}
System.out.println(age);
}
【程序 23】
程序分析:比较法或number/1000!=0来判断位数
public void orderPrint(){
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个不大于10000的正整数:");
int number = scan.nextInt();
int ge =0;
int shi=0;
int bai=0;
int qian=0;
if(number>10000 || number<0){
System.out.println("number不能大于10000且不能小于0,请重新输入:");
number = scan.nextInt();
}
if(number>1000){
System.out.println(number+"是四位数");
qian = number/1000;
bai = (number%1000)/100;
shi = ((number%1000)%100)/10;
ge = number%10;
System.out.println(number+"逆向打印:"+ge+","+shi+","+bai+","+qian);
}else if(number>100){
System.out.println(number+"是三位数");
bai = (number%1000)/100;
shi = ((number%1000)%100)/10;
ge = number%10;
System.out.println(number+"逆向打印:"+ge+","+shi+","+bai);
}else if(number>10){
System.out.println(number+"是二位数");
shi = ((number%1000)%100)/10;
ge = number%10;
System.out.println(number+"逆向打印:"+ge+","+shi);
}else{
System.out.println(number+"是一位数");
ge = number%10;
System.out.println(number+"逆序打印:"+ge);
}
}
【程序 24】
public void palindrome(){
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个5位数:");
int aa = scan.nextInt();
if(aa/10000==0){
System.out.println("输入错误,请重新输入");
aa = scan.nextInt();
}
int ge = aa%10;
int wan = aa/10000;
int shi = ((aa%10000)%1000)%100/10;
int qian = (aa%10000)/1000;
if(ge==wan && shi==qian){
System.out.println(aa+"是回文数");
}
}
【程序 25】
public void weekday(){
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个星期首字母:");
String aa = scan.next();
String a ="" ;
String sa = "";
//利用switch结构性执行下一个带有break语句的case分支,以实现忽略用户控制台输入大小写敏感
switch(aa){
case "m":
case "M": a = "星期一";
break;
case "w":
case "W": a = "星期三";
break;
case "f":
case "F": a = "星期五";
break;
case "t":
case "T":System.out.println("请输入第二个字母:");
sa = scan.next();
a = (sa.equalsIgnoreCase("h")==true)?"星期四":"星期二";
break;
case "s":
case "S":System.out.println("请输入第二个字母:");
sa = scan.next();
a = (sa.equalsIgnoreCase("a")==true)?"星期六":"星期天";
break;
default:a ="输入错误!";
}
System.out.println("输入的是:"+a);
}
【程序 26】
求100以内的素数
1.程序分析:素数是只能被1和本身整除的数
public void prime1(){
int sum=0;
System.out.println("100以内的素数有:");
for(int i=2;i<=100;i++){
for(int j=2;j<=i;j++){
if(i%j==0 && i==j){
sum++;
System.out.print(i);
System.out.print(",");
}else if(i%j==0 && i!=j){
break;
}
}
}
System.out.println();
System.out.println("100以内的素数共有:"+sum+"个");
}
【程序 27】
对10个数进行排序
1.程序分析:冒泡法。前后数据相比较交换,每轮选出一个最大值。
public void bubble(){
Scanner scan = new Scanner(System.in);
System.out.print("请输入十个正整数:");
int arr[] = new int[10];
int temp;//用于交换
for(int m =0;m<10;m++){
arr[m] = scan.nextInt();
}
for(int i=0;i<9;i++){
for(int j=0;j<9-i;j++){
if(arr[j]<arr[j+1]){
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
for(int i=0;i<10;i++){
System.out.print(arr[i]);
if(i!=9){
System.out.print(",");
}
}
}
【程序 28】
求一个3*3矩阵对角线元素之和
1、程序分析:将行与列下标相等的数相加
public void matrix(){
int arr[][] = new int[3][3];
int sum = 0;
int sum1 = 0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个3*3矩阵:");
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
arr[i][j] = scan.nextInt();
System.out.print(arr[i][j]+" ");
if(i==j){
sum+=arr[i][j];
}
if(i+j==2){
sum1+=arr[i][j];
}
}
System.out.println( );
}
System.out.println("两条对角线之和分别是:"+sum+","+sum1);
}
【程序 29】一个数组逆序输出
1、思路:逆向循环遍历
略
【程序 30】取一个整数a从右端开始的4~7位
1、思路:
public void cutOut(){
int a=0;
Scanner sc=new Scanner(System.in);
System.out.print("请输入一个至少7位的整数:");
long b=sc.nextLong();
if(b<1000000){//b%1000000==0
System.out.println("输入整数小于7位!!");
}else{
a=(int) Math.floor(b % Math.pow(10,7)/Math.pow(10, 3));
System.out.println(a);
}
}