Key Point
for 循环的使用
while循环
do...while 循环 break 和 continue
练习
1. (for 循环)计算 1+2+3+...+100 的和
public class TestFor1 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=100;i++){
sum=sum+i;
}
System.out.println(sum);
}
}
2. (for 循环)计算 1+3+5+...+99 的和
public class Test02 {
public static void main(String[] args) {
int sum=0;
for(int num=1;num<=100;num++){
if(num%2!=0){
sum=num+sum;
}
}
System.out.println (sum); //2500
}
}
3. (while/do…while 循环)把 1、2 两题用 while 循环或 do...while 循环改写
public class TestWhile1 {
public static void main(String[] args) {
int sum=0;
int i=1;
while(i<=100){
sum=sum+i;
i++;
}
System.out.println(sum);
}
}
public class Test3 {
public static void main(String[] args) {
int sum=0;
int num=1;
while(num<=100){
if(num%2!=0){
sum=num+sum;
}
num++;
}
System.out.println (sum); //2500
}
}
public class Test03 {
public static void main(String[] args) {
int sum=0;
int num=1;
do{
if(num%2!=0){
sum=num+sum;
}
num++;
} while(num<=100);
System.out.println (sum); //2500
}
}
4. (for 循环)读入一个小于10 的整数 n,输出它的阶乘 n!
import java.util.*;
public class Test4 {
public static void main(String[] args) {
System.out.println("请输入一个小于10的整数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum=1;
for(int i=1;i<=n;i++){
sum=sum*i;
}
System.out.println ("一个10以内数的阶乘:"+sum);
}
}
5. (for 循环)求 100以内所有能被 3 整除但不能被 5 整除的数字的和。
//例题5:
public class Test5 {
public static void main(String[] args) {
int sum=0;
for(int num=1;num<=100;num++){
//if(num%2!=0){
if(num%3==0&&num%5!=0){
sum=num+sum;
}
}
System.out.println (sum); //1368
}
}
6. (for 循环)*“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3 文钱可以买 1 只公鸡,2 文钱可以买一只母鸡,1 文钱可以买 3 只小鸡。用 100 文钱买 100只鸡,那么各有公鸡、母鸡、小鸡多少只?
public class Test6 {
public static void main(String[] args) {
int i=0;
for(int a=1;a<100/3;a++){ //100/3=33,公鸡小于33只;
for(int b=1;b<100/2;b++ ){ // 100/2=50,母鸡少于50;
if((100-3*a-2*b)*3 == (100-a-b)){
i++;
System.out.println("第"+i+"方法:"+a+"只公鸡"+b+"只母鸡"+(100-a-b)+"只雏鸡");
System.out.println();
}
}
}
}
}
7. (for 循环)*搬砖问题:36 块砖,36 人搬,男搬 4,女搬 3,两个小孩抬 1 砖,要求一次全搬完,问男、女和小孩各若干?
public class Test7 {
public static void main(String[] args) {
int s=0;
for( int x=0;x<=9;x++) {
for( int y=0;y<=12;y++){
for( int z=0;z<=36;z++) {
if(z%2==0 && (x+y+z)==36 && (x*4+y*3+z/2)==36)
{
s++;
System.out.println("第"+s+"种方法: "+x+"男"+y+"女"+z+"小孩子");
}
}
}
}
}
}//第1种方法: 3男3女30小孩子
8. (for 循环)*编程找出四位整数 abcd 中满足下述关系的数。
(ab+cd)(ab+cd)=abcd
public class Test8 {
public static void main(String[] args) {
for(int i=1000;i<10000;i++){
int ab=i/100;
int cd=i%100;
if((ab+cd)*(ab+cd)==(ab*100+cd)){
System.out.println("四位数是"+i);
}
}
}
}//2025
//3025
//9801
9. (循环)*读入一个整数 n,输出如下图形
n = 4
*
***
*****
******
思路:读入的整数 n,就是外层循环的循环次数。
对于每一行,要做的事情:1. 输出若干个空格;2. 输出若干个星;3. 换行。提示:输出不换行,用System.out.print()
import java.util.*;
class TestFor9{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("打印几行:");
int n = sc.nextInt();
for(int i=1;i<=n;i++){ //打印列
for(int k=1;k<=n-i;k++){
System.out.print(" ");
} //打印每行的空格
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
} //打印每行的*
System.out.println();
}
}
}
10. (循环)*输出 99 乘法表
public class For10 {
/*
需求: 在控制台上打印一个正立的直角三角形 。
*/
public static void main(String[] args) {
for(int i = 1 ; i< 9 ; i++){
for(int j = 1 ; j<=i ; j++){ //控制列数
System.out.print(i+"*"+j+"="+i*j+"\t ");
}
System.out.println();
}
}
}
11. (循环)**求水仙花数。所谓水仙花数,是指一个三位数 abc,如果满足 a3+b3+c3=abc,则 abc 是水仙花数。
//例题
public class Test11 {
public static void main(String[] args) {
int z=0;
for(int i=1;i<=9;i++){
for(int n=0;n<=9;n++){
for(int y=0;y<=9;y++){
int s=(i*100)+(n*10)+y;
int b=(i*i*i+n*n*n+y*y*y);
if(b==s)
{
z++;
System.out.println("第"+z+"种方法:"+s);
}
}
}
}
}
}
12. (循环)**输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
//例题
public class Test12 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数:");
int a = sc.nextInt();
int sum=0;
for(int i=0;a>0;i++){
sum+=a%10;
a/=10;
}
System.out.println("sum=:"+sum);
}
}
13. (循环)**输入一整数 A,判断它是否质数。
提示 1:若从 2 到 A 的平方根的范围内,没有一个数能整除 A,则 A 是质数。提示 2:在 java 中计算 n 的平方根可以使用 Math.sqrt(n)
//例题
import java.util.*;
public class Example13
{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数:");
int a=sc.nextInt();
if(a<2){
System.out.println("a是一个质数");}
//判断该数最小公因子
for(int i=2;Math.sqrt(a)>=i;i++)
{
if(a%i==0){
System.out.println("该数不是质数");
}
}
System.out.println("该数是质数");
}
}
14. |
(循环)**如果一个数等于其所有因子之和,我们就称这个数为"完数",例如 6 的因子为 |
1,2,3 6=1+2+36 就是一个完数.请编程打印出 1000 以内所有的完数
|
|
|
中国古代数学家研究出了计算圆周率最简单的办法:
PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......
这个算式的结果会无限接近于圆周率的值, 我国古代数学家祖冲之计算出, 圆周率在 3.1415926和 3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运算?
public class Test15{
public static void main(String[] args){
double PI =0;
int a=0;
int b=0;
double d =1.0;
while(PI<3.1415926||PI>3.1415927){
if((int)d%2!=0){
PI =PI+ 4.0/(2*d-1);
}else{
PI =PI- 4.0/(2*d-1);
b++;
}
d=d+1;
a++;
}
System.out.println("运算的总次数:"+a);
System.out.println("减法的总次数:"+b);
}
}
16. (循环)**已知:faibonacci(费波那契)数列的前几个数分别为 0,1,1,2,3,5,……。从第 3 项开始,每一项都等于前两项的和。
//例题16:数:0,1,1,2,3,5.......
import java.util.Scanner;
public class Test16 {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
System.out.print("请输入一个整数:");
int n=sc.nextInt();
int sum=0;
int a=0;
int b=1;
for(int i=1;i<=n;i++)
{
if(i==1){
sum=0;
}else if(i==2){
sum=1;
}else{
sum=a+b;
a=b;
b=sum;
}
System.out.println(sum);
}
}
}
17. (循环,操作符)**一个 int 类型的整数由 32 个二进制位组成,每个二进制位的值要么为 0 要么为 1。要求读入一个 int 类型的整数 n,计算它的 32 个二进制位中总共有多少位为
1?
import java.util.Scanner;
public class Test171 {
public static void main(String args[]){
Scanner sc = new Scanner (System.in);
System.out.print("请输入一个二进制数:");
int k=0;
int n=sc.nextInt();
for(int i=0;i<32;i++){
int t=n>>i;
if((t & 1)==1){
k++;
}
}
System.out.println(k);
}
}
18. (循环)***打渔还是晒网
中国有句老话叫“三天打渔,两天晒网”。假设有一个人从 2000 年 1 月 1 日开始“三天打渔两天晒网”,读入三个整数,分别表示年份、月份、日期,问这三个整数所表示的那天这个人在打渔还是在晒网?
//例题18:打渔晒网
import java.util.Scanner;
public class Test18 {
private static Scanner sc;
public static void main(String args[]){
int sum=0;
sc = new Scanner (System.in);
System.out.print("请输入一个年份:");
int y=sc.nextInt();
System.out.print("请输入一个月份:");
int m=sc.nextInt();
System.out.print("请输入一个日期:");
int d=sc.nextInt();
for(int i=2000;i