循环控制练习:
for/while
Q1:求和1+2+3+……+100
package Zuoye_week01;
//求和1+2+3+……+100
public class Zuoye01 {
public static void main(String[] args) {
int sum=0;
for (int i=1;i<=100;i++){
sum+=i;
}
System.out.println(sum);
}
}
Q2:求和1+3+5+……+99
package Zuoye_week01;
//求和1+3+5+……+99
public class Zuoye02 {
public static void main(String[] args) {
int sum=0;
for (int i=1;i<=99;){
sum+=i;
i+=2;
}
System.out.println(sum);
}
}
Q3:(while/do…while循环)把1、2两题用while 循环或do. …while循环改写
do…while循环把1改写package Zuoye_week01;
//求和1+2+3+……+100
public class Zuoye03_1 {
public static void main(String[] args) {
int sum=0,i=1;
do{
sum+=i;
i++;
}while(i<=100);
System.out.println(sum);
}
}
do…while循环把2改写
package Zuoye_week01;
//求和1+3+5+……+99
public class Zuoye03_2 {
public static void main(String[] args) {
int sum=0,i=1;
do{
sum+=i;
i+=2;
}while(i<=99);
System.out.println(sum);
}
}
Q4:(for循环)读入一个小于10的整数n,输出它的阶乘n
package Zuoye_week01;
//小于10整数n,输出阶乘
import java.util.Scanner;
public class Zuoye04 {
public static void main(String[] args) {
int sum=1,i;
Scanner sc=new Scanner(System.in);
System.out.println("请输入要计算阶乘的数:");
i=sc.nextInt();
do{
sum*=i;
i--;
}while(i>=1);
System.out.println(sum);
}
}
Q5:(for 循环)求100以内所有能被3整除但不能被5整除的数字的和。
package Zuoye_week01;
//输出100以内被三整除但不能被5整除的和
import java.util.Scanner;
public class Zuoye05 {
public static void main(String[] args) {
int i=1,sum=0;
for(i=1;i<=100;i++){
if (i%3==0&&i%5!=0){
sum+=i;
}
}
System.out.println(sum);
}
}
Q6:(for循环)“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?
package Zuoye_week01;
//公鸡3文钱1只,母鸡2文钱1只,小鸡3只1文钱,100文钱买100只鸡,怎么买?
public class Zuoye06 {
public static void main(String[] args) {
for (int cock = 0; cock <= 33; cock++) {
for (int hen = 0; hen <=50; hen++) {
if (cock *3 + hen * 2 + (100 - cock - hen)/3 == 100 && (100 - cock - hen)%3 == 0) {
System.out.println("公鸡" + cock + "只,母鸡" + hen + "只,小鸡" + (100 - cock - hen) + "只。");
}
}
}
}
}
Q7:(for循环)搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次全搬完,问男、女和小孩各若干?
package Zuoye_week01;
//搬砖问题,36块砖。男搬4,女搬3,俩小孩儿搬一块
public class Zuoye07 {
public static void main(String[] args) {
for (int cock = 0; cock <= 9; cock++) {
for (int hen = 0; hen <=12; hen++) {
if (cock *4 + hen * 3 + (36 - cock - hen)/2 == 36 && (36 - cock - hen)%2 == 0) {
System.out.println("男搬砖" + cock + "次,女板砖" + hen + "次,小孩儿搬砖" + (36 - cock - hen) + "次。");
}
}
}
}
}
Q8:(for循环)编程找出四位整数abcd中满足下述关系的数。(ab+cd)(ab+cd)=abcd
package Zuoye_week01;
// (for 循环)*编程找出四位整数 abcd 中满足下述关系的数.(ab+cd)(ab+cd)=abcd
public class Zuoye08 {
public static void main(String[] args) {
// 千位,百位和十位,各位相乘,先得出千百,和十个位判断即可
for (int abcd = 1000; abcd <= 9999; abcd++) {
int ab = abcd / 100;
int cd = abcd % 100;
if ((ab + cd) * (ab + cd) == abcd)
System.out.println(abcd);
}
}
}
Q9:(循环)读入一个整数n,输出实心金字塔
思路:读入的整数n,就是外层循环的循环次数。
对于每一行,要做的事情:1.输出若干个空格:2.输出若干个星:3.换行。提示:输出不换行,用System. out. print (
package Zuoye_week01;
import java.util.Scanner;
public class Zuoye09 {
public static void main(String[] args)
{
int i, j, k, n;
Scanner input = new Scanner(System.in);
System.out.print("请输入金字塔层数:");
n = input.nextInt();
//外层循环控制层数
for(i = 1; i <= n; i++)
{
//根据外层行号,输出星号左边的空格
for(j = 1; j <= n - i; j++)
System.out.printf(" ");
//根据外层行号,输出星号个数
for(k = 1; k <= 2 * i -1; k++)
System.out.print("*");
//一行结束,换行
System.out.print("\n");
}
}
}
Q10:(循环)输出99乘法表
package Zuoye_week01;
//9 * 9 乘法表
public class Zuoye10 {
public static void main(String[] args) {
for (int i = 1; i <10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + "=" + i * j + " ");
}
System.out.println();
}
}
}
Q11:(循环)求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足aaa+bbb+ccc=abc,则abc是水仙花数。
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153
package Zuoye_week01;
//输出指定范围内水仙花数:它的每个位上的数字的 3次幂之和等于它本身
import java.util.Scanner;
public class Zuoye11 {
public static void main(String[] args) {
int m=0;
Scanner sc=new Scanner(System.in);
System.out.println("请输入范围:");
m=sc.nextInt();
for (int i = 100; i < m; i++) {
int firstNum = i / 100;
int secondNum = i / 10 % 10;
int thirdNum = i % 10;
if (firstNum * firstNum * firstNum + secondNum * secondNum * secondNum + thirdNum * thirdNum * thirdNum == i) {
System.out.println("水仙花数为:" + i);
}
}
}
}
Q12:(循环)输入一个整数,计算它各位上数字的和。
注意:是任意位的整数
package Zuoye_week01;
//计算输入的各数位数字之和
import java.util.Scanner;
public class Zuoye12 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
System.out.println("input a number");
int a= sc.nextInt();
int sum=0;
int b=0;
while(a>0) {
if(a!=0) {
b=a%10;
sum=sum+b;
a=a/10;
}
}
System.out.println(sum);
}
}
Q13:(循环)输入一整数A,判断它是否质数
提示l:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。
提示2:在java中计算n的平方根可以使用Math.sqrt(n)
package Zuoye_week01;
import java.util.Scanner;
//判断输入是不是质数
public class Zuoye13 {
public static void main(String[] args) {
boolean zhishu = true;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个正整数");
int num = sc.nextInt();
if (num > 0) {
int k = (int) Math.sqrt(num);//k为num的正平方根,取整数
for (int i = 2; i <= k; i++) {
if (num % i == 0) {
zhishu = false;//不是素数
break;
}
}
}
if (zhishu) {
System.out.println(num + "是质数");
} else {
System.out.println(num + "不是质数");
}
}
}
Q14:(循环)如果一个数等于其所有因子之和,我们就称这个数为"完数",请编程打印出1000以内所有的完数
例如 6 的因子为1,2,3;
6=1+2+36就是一个完数.
package Zuoye_week01;
/*如果一个数等 于其所有因子之和,我们就称这个数为"完数"
* 例如6的因子为1,2,3, 6=1+2+3, 6就是一一个完数.
* 请编程打印出1000以内所有的完数*/
public class Zuoye14 {
public static void main(String[] args) {
int i = 1;
int j = 1;
for(i = 1; i <= 1000; i++) {
int sum = 0;
for(j = 1; j <= i - 1; j++) {
if(i % j == 0) {
sum += j;
}
}
if(sum == j)
System.out.println(sum);
}
}
}
Q15:计算圆周率需要要经过多少次加减法运算
中国古代数学家研究出了计算圆周率最简单的办法:
PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17…
这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,
圆周率在3.1415926和3.1415927之间,
请编程计算,要想得到这样的结果,他要经过多少次加减法运算?
package Zuoye_week01;
//求π需要计算的次数
import java.util.Scanner;
public class Zuoye15 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a = 1;
double pi = 0.0;
int t = 0;// i为运算次数
while (!(pi < 3.1415927 && pi > 3.1415926)) {
pi += 4 / a;// pi(每次累加的数为4/a)
if (a < 0) {// 当a为负数时减2,当a为正数时加2.
a -= 2;
} else {
a += 2;
}
a = -a;// a每次取反相加
t++;
}
System.out.println("当圆周率在 3.1415926 和3.1415927 之间时,需要计算:" + t + "次");
}
}
Q16:(循环)已知: Fibonacci(费波那契)数列的前几个数分别为0,1,1,2,3,5,……"。从第3项开始,每一项都等于前两项的和
读入一个整数n,编程求出此数列的前n项。
注意:这里的数列是从0开始的。
package Zuoye_week01;
//Fibonacci数列
public class Zuoye16 {
public static void main(String[] args) {
for (int counter = 0; counter <= 10; counter++){
System.out.printf("Fibonacci of %d is: %d\n", counter, fibonacci(counter));
}
}
public static long fibonacci(long number) {
if ((number == 0) || (number == 1))
return number;
else
return fibonacci(number - 1) + fibonacci(number - 2);
}
}
Q17:(循环,操作符)社一个int类型的整数由32个二进制位组成,每个二进制位的值要么为0要么为l。要求读入一个int类型的整数n,计算它的32个二进制位中总共有多少位为1?
package Zuoye_week01;
import java.util.Scanner;
public class Zuoye17 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int num1 = 0;
int num0 = 0;
while (n > 0) {
if (n % 2 == 0) {
num0++;
} else {
num1++;
}
n >>= 1;
}
System.out.println("1的个数为 " + num1);
System.out.println("0的个数为 " + num0);
}
}
Q18:打鱼还是晒网?
中国有句老话叫“三天打渔,两天晒网”。
假设有一个人从2000年1月1日开始“三天打渔两天晒网”,读入三个整数,分别表示年份、月份、日期,问这三个整数所表示的那天这个人在打渔还是在晒网?
(某人从2000年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是在“打鱼”,还是在“晒网”?)
package Zuoye_week01;
import java.util.Scanner;
//打鱼晒网
public class Zuoye18 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scanner.nextInt();
System.out.println("请输入月份:");
int month = scanner.nextInt();
System.out.println("请输入日期");
int day = scanner.nextInt();
judge(getAllDays(year, month, day));
}
// 判断打鱼还是晒网
public static void judge(int days) {
int x = days % 5;
if (x >= 1 && x <= 3) {
System.out.println("打鱼!");
} else if (x == 4 || x == 0) {
System.out.println("晒网!");
}
}
// 判断是否是闰年
public static boolean runNian(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
}
return false;
}
// 计算距离输入日期多少天
public static int getAllDays(int year, int month, int day) {
int sum = 0;
// 计算2000--(year-1)之间有多少天
for (int i = 1990; i < year; i++) {
if (runNian(i)) {
sum += 366;
} else {
sum += 365;
}
}
// 计算year内多少天
sum += getBeforeDays(year, month, day);
return sum;
}
// 判断每月有几天
public static int getDays(int year, int month) {
int days = 0;
switch (month) {
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 (runNian(year)) {
days = 29;
} else {
days = 28;
}
break;
}
return days;
}
// 计算本年内该日期之前共有多少天
public static int getBeforeDays(int year, int month, int day) {
int sum = 0;
for (int i = 1; i < month; i++) {
sum += getDays(year, i);
}
return sum + day;
}
}
Q19:打印实心菱形
package Zuoye_week01;
//打印实心菱形
import java.util.Scanner;
public class Zuoye19 {
public static void main(String[] args) {
int size;
Scanner input = new Scanner(System.in);
System.out.print("请输入一半层数:");
size = input.nextInt();
//外层循环控制层数
for (int i = 1; i <= size; i++) {
for (int j = 1; j <= size - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
System.out.print('*');
}
System.out.println();
}
for (int i = 1; i <= size-1; i++) {
for (int j = 1; j <= i; j++){
System.out.print(" ");
}
for (int k = 2*size-3; k >= 2 * i - 1; k--){
System.out.print('*');
}
System.out.println();
}
}
}