【程序1】题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
public class Programme4 {
public static void main(String[] args) { System.out.print("请输入一个你要分解的正整数:"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt();//获取输入的数字 System.out.println(); System.out.print(input+"="); for (inti = 2; i < input+1; i++) {
while(input%i==0&&input!=i) { input=input/i; System.out.print(i+"*"); } if(input==i){//上面的都不能整除,说明这是一个质数 System.out.print(i); break; } } scanner.close(); } } |
【程序2】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
*这里有一个知识点要记住的,最大公约数和最小公倍数的求法
*1、先求最大公约数bigDivisor
*2、就可以很方便获得最小公倍数multiple=input1*input2/bigDIvisor
*这里最重要的就是求最大公约数:求法如下
*(1)用大的数对小的数求余
*(2)把小的数赋值给大的数,把求余获得的结果赋值给小的数,
*(3)循环上一步的操作,直到求余的结果为零
*(4)上一步被求余的数就是我们要的最大公约数,不信的话,你可以动手试试
public class Programme6 {
public static void main(String[] args) { int bigDivisor=0;//定义最大公约数 int multiple=0;//定义最小公倍数 System.out.println("请输入两个整数:"); Scanner scanner = new Scanner(System.in); int input1 = scanner.nextInt();//获取第一个数 int input2 = scanner.nextInt();//获取第二个数 multiple=input1*input2;//这个值保存,求公约数后,方便求得最小公倍数 int temp =1;// 交换用的中间数
if (input2 >input1) {//确保第一个数不小于第二个数 temp=input1; input1=input2; input2=temp; }
while (temp!=0) { //求余结果不等于零,就一直循环 temp=input1%input2;//求余结果 input1=input2;//大的数已经没用了,用小的数替代 input2=temp;//把求余的结果赋值给小的数 } bigDivisor=input1;//最后一次求余结果为零时,被求余的数 multiple=multiple/bigDivisor; System.out.println("最大公约数是:"+bigDivisor ); System.out.println("最小公倍数是:"+multiple); scanner.close(); } }
|
【程序3】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
程序分析:???感觉不能下手!
* 这道题目使用的是构造方法,还有arrayList的知识!标准答案的答案!
* 但是,还是被我用for循环给解决了
* 这里重要的是使用赋值,还有充分使用给出的条件,还有一个就是互不冲突的常识,比如第一个if的使用!
public class Programme18 { public static void main(String[] args) { String a = null,b=null,c=null;//甲队成员 String[] racer = {"x","y","z"};//乙队成员 for(inti=0;i<3;i++){ for (intj = 0; j <3;j++) { for (intk = 0; k < 3;k++) { if (i!=j&&i!=k&&j!=k) { a=racer[i]; b=racer[j];c=racer[k]; if (!a.equals("x")&&!c.equals("z")&&!c.equals("x")) { if (a.equals(racer[i])&&b.equals(racer[j])&&c.equals(racer[k])) { System.out.println("a的对手是:"+racer[i]+",b的对手是:"+racer[j] +",c的对手是:"+racer[k] ); } } } } } } } } |
程序4】
题目:打印出杨辉三角形(要求打印出10行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1、二维数组的使用
2、第一列的数都是1
3、使用两个for循环,i控制行,j控制列;
从第二行第二列起arr[i][j]=arr[i-1][j-1]+arr[i-1][j]
public static void main(String[] args) { int[][]arr=newint[10][10]; for (inti = 0; i < arr.length; i++) { arr[i][0]=1;//控制第一列的数等于1 } for (inti = 1; i < arr.length; i++) { for (intj=1; j < arr.length; j++) { arr[i][j]=arr[i-1][j-1]+arr[i-1][j];//赋值 } } //打印结果 for (inti = 0; i < arr.length ; i++) { for (intk = arr.length-i;k>0;k--) {//空格的控制,为了好看 System.out.print(" "); } for (intj = 0; j < arr.length; j++) {//打印出数组的数字 if (arr[i][j]!=0) {//把把没赋值的零去掉 System.out.print(arr[i][j]+" "); } } System.out.println();//控制换行 } } } |
【程序5】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
关键问题是怎么移除》?:布尔值确定,如果被选中被赋值为false
* 从第一个人开始判断,如果他在圈内,那么报数,再判断他报的数是否是3,如果是的话移出圈外
* 接着判断下一个人,是否到了最末,如果是的话,从零开始
* 不断循环,直到最后剩下1个人
public static void main(String[] args) { System.out.print("请输入一个整数:"); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); scan.close(); //定义数组变量标识某人是否还在圈内 boolean[]isIn = newboolean[n]; for(inti=0;i<isIn.length;i++){ isIn[i] =true; } int inCount = n;//定义圈内人数 int countNum = 0;//定义报数 int index = 0;//定义索引 while(inCount>1){//最后一人时退出循环 if(isIn[index]){//判断下一个人是否在圈内 countNum++;//在的话报数 if(countNum==3){//如果这个数等于3 isIn[index] =false;//把他定义为出圈 countNum = 0;//报数清零,下一个好从1开始 inCount--;//圈内人数减一 } } index++;//下一人的位置索引值 if(index==n){//当索引到最后之后再从头开始 index = 0; } } for(inti=0;i<n;i++){ if(isIn[i]){//最后只有一个符合条件的 System.out.println("留下的是:"+(i+1)); } } } } |
【程序6】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,
利用双重 for循环,第一层控制行,第二层控制列。
详细分析第一部分图形的规律:1、这是一个等腰三角形,*的打印次数1、3、5、7等差数列
2、还要注意空格打印的 次数3、2、1、0逐渐递减
* 第二部分同理可得!
public class Programme19 { public static void main(String[] args) { //打印上面部分: int n=4; for (inti = 0; i < n; i++) { //控制行 for (intk =3-i; k > 0 ; k--) { //控制*前面空格的输出 System.out.print(" "); } //输出符号,但不要换行 for (intj = 0; j <=2*i;j++) { //控制列 System.out.print("*"); } //输出完符号马上换行 System.out.println(); } //打印下面部分 n=3; for (inti = n; i > 0; i--) { //控制行 for (intk =3-i+1; k > 0 ; k--) { //控制*前面空格的输出,第一行要加空格 System.out.print(" "); } //输出符号,但不要换行 for (intj = 0; j <=2*i-2;j++) { //控制列 System.out.print("*"); } //输出完符号马上换行 System.out.println(); } } } |