一、题目:
打印时钟
例如WINDOWS任务栏中的时钟
如:
23:59:57
23:59:58
23:59:59
00:00:00
00:00:01?
二、 思路提示:
一秒,一秒的走 用循环
秒大于或小于60两种情况用选择
分大于或小于60两种情况用选择
时大于或小于24(以一天24小时计算)两种情况用选择
三、 程序:
int shi=23; //定义小时
int fen=58; //定义分钟
int miao=36; //定义秒
for(int i=1;i<=300;i++)
{
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
if(shi<10)
{
System.out.print("0"+shi+":");
}
else
{
System.out.print(shi+":");
}
if(fen<10)
{
System.out.print("0"+fen+":");
}
else
{
System.out.print(fen+":");
}
if(miao<10)
{
System.out.println("0"+miao);
}
else
{
System.out.println(miao);
}
}
二、题目:
1
11
2
22
222
3
33
333
3333
4
44
444
4444
44444
5
5
5
5
5
5
5
5
5
5
如图打印一个旗;?
二、 思路提示:
如题把旗分成旗头跟旗杆;
旗头由4小旗头组成(一个个) 有次数循环;
每个小旗头又是一层层 有次数循环;
每层由一个个数字组成 有次数循环;
旗杆由一层层组曾;?
三、 程序:
//1. 4个旗头
for (int ceng=1;ceng<=4 ;ceng++ )
{
for (int hang=1;hang<=ceng+1 ;hang++ )
{
//1.1 打印字
for (int zi=1;zi<=hang ;zi++ )
{
System.out.print(ceng);
}
//1.2 换行
System.out.println();
}
}
//2.杆
for (int h=0;h<10 ;h++ )
{
System.out.println("5");
}
三、题目:
*
***
*****
*******
*********
如图打印
?
二、 思路提示:
一行一行的打印 打印5行,已知次数循环;
每行打印的5-行数个空格;
每行打印2*行数-1个*。
三、 程序:
for(int h=1 ;h<=5 ; h=h+1)
{
for(int k=1 ;k<=5-h ;k++ )
{
System.out.print(" ");//打印
}
for(int o=1 ;o<=2*h-1 ;o++ )
{
System.out.print("o");//打印
}
System.out.println();//打印
}
四、题目:
有8个人在一起数数,从开始当数到8的时候向回数,当数到一得时候在向下数,反复循环问50次后数到几。
二、 思路提示:
数50次 一次又一次 有次数的循环;
是正数还是反数哪? 二选一;
数到8或数1了吗? 二选一。
三、 程序:
int shu=1;
boolean sj=true; //升序降序
for (int ci=1;ci<=50 ;ci++ )
{
if(sj==true)
{
if(shu==8)
{
shu=7;
sj=false;
}
else
{
shu++;
}
}
else
{
if(shu==1)
{
shu=2;
sj=true;
}
else
{
shu--;
}
}
System.out.println(ci+":"+shu);
}
* 五.卖血问题:
* 假设你的女友跟说你有100000我就嫁给你
* 现在输入你的存款数 如果不够就去卖血卖一次赚 300元
* 问卖血多少才能抱得美人归
*/
public static void fun3()
{
//得到你的存款数
Scanner scann = new Scanner(System.in);
System.out.println("请输入你的存款数:");
int ck = scann.nextInt();
//声明一个计数器记录卖血的次数
int cs =0;
//只要你的存款不足100000就一直卖
while(ck<100000)
{
//卖血次数++
cs++;
//存款300
ck+=300;
}
System.out.printf("卖血%d次存款%d",cs,ck);
}
/**
* 卖血问题:
* 假设你的女友跟说你有100000我就嫁给你
* 现在输入你的存款数 如果不够就去卖血卖一次赚 253元
* 要求你至少为爱情卖血一次
* 问卖血多少才能抱得美人归
* do{}while();
*/
public static void fun4()
{
//得到你的存款数
Scanner scann = new Scanner(System.in);
System.out.println("请输入你的存款数:");
int ck = scann.nextInt();
//声明一个计数器记录卖血的次数
int cs =0;
//只要你的存款不足100000就一直卖
do
{
//卖血次数++
cs++;
//存款+253
ck+=253;
}
while(ck<100000);
System.out.printf("卖血%d次存款%d",cs,ck);
}
六.一群人去献血 ,医生说一次能进4个人,我排在第15个,问我第几次能进入
*
* while(如果进入的人数<15)
*/
public static void fun2()
{
//定义一个计数器,用于记录进入的次数
int cs =0;
//定义一个计数器,已经进入的总人数
int rs=0;
while(rs<15)
{
//次数加1
cs++;
//人数加4
rs+=4;
}
System.out.printf("我是第%d次进入的",cs);
}
/**
* 输出1到100之间前7个被3整除的数
* 思路:1、输出 1到100之间所有能被3整数的数
* 2、定义一个计数器来控制输出的个数
*/
public static void fun1()
{
//定义一个计数器,用于记录已经打印的个数
int num=0;
//从1遍历到100
for(int i=1;i<=100 && num<7;i++)
{
if(i%3==0)//能被整除
{
System.out.println(i);
num++;//计数器加1
//判断是否已经打印7个了
/* if(num==7)
{
break;//结束循环
}*/
}
}
}
七.求21的平方根;
二、 思路提示:
对开方进行正向理解可以得
//总有一个整数最接近要开方的数;
1,2,3,4,5,6,7…..
//假设最接近要开方的数是2,总有一个小数接近开方的数。
2.1,2.2,2.3,2.4----2.9
//依次找下去总一个精度是我们需要的。
2.21,2.22,2.23,2.24---2.29
…………………………………………..
如分析可以一层又一层布知道多少层 但至少要一次用什么循环。?
三、 程序:
double jie=0.0;
do
{
jie=jie+0.0001;
}
while (jie*jie<21);
System.out.println(jie);
八.圆周率问题:【2011全国编程大赛高中组初赛题】
中国古代数学家研究出了计算圆周率最简单的办法:
PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......
这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在多少
3.1415926 和3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运
while(!(pai>=3.1415926 && pai<=3.1415927))
{
向PI上累计加减
//符号 取反
//分母 +2
}
*/
public static void fun2()
{
//定义一个变量表示圆周率
double pai =0;
//定义一个变量表示分母
double fm =1;
//定义一个变量表示符号
boolean flag = true;//true表示是正号
//定义一个计数器
int cs=0;
while(!(pai>=3.1415926 && pai<=3.1415927))
{
if(flag)//加号
{
pai+=4/fm;
}
else
{
pai-=4/fm;
}
//分母+2
fm+=2;
//符号取反
flag = !flag;
//次数++
cs++;
}
System.out.println("经过"+cs+"运算之后!");
}
}
* 九.一个数如果恰好等于它的因子
* (如果一个数能够被一个不是它自身的数整除那么这个数就是它的因子)之和,
* 这个数就称为 "完数 "。例如6=1+2+3.编程
* 找出1000以内的所有完数。并显示出所属因子
* 思路:
* 1、遍历 1到10000的每个数
*
* 2、取出 i的因子和 i=8 返回7
*
* 3、得到i的因子信息i=8 返回"1+2+4"
*/
/**
* 1、遍历 1到1000的每个数
*/
public static void fun2()
{
for(int i=1;i<=1000;i++)
{
//得到i的因子和
int he = fun3(i);
if(he == i)
{
//显示
//得到i的因子信息
String yzxx = fun4(i);
System.out.println(i+" "+yzxx);
}
}
}
/**
* 接收一个整数得到该数的因子和
*
*/
public static int fun3(int shu )
{
int he=0;
//让shu依次从1除到shu-1 如果除开表示 这是shu的一个因子
for(int i=1;i<=(shu-1);i++)
{
if(shu%i==0)
{
//表示i是shu的一个因子,追加到he上
he+=i;
}
}
return he;
}
/**
* 得到一个数因子相加的结果
*/
public static String fun4(int shu)
{
String message="(";
//让shu依次从1除到shu-1 如果除开表示 这是shu的一个因子
for(int i=1;i<=(shu-1);i++)
{
if(shu%i==0)
{
//表示i是shu的一个因子,追加到he上
message+=" "+i;
}
}
message+=")";
return message;
}
*十. 选择排序:{9,7,5,3,2,1,15,19}
* 思路:
* 选择length-1次
* 每次将[i,length-1]范围内的最小值和i位置上的值交换
*/
public static void fun3(int[] arr)
{
//选择length-1
for(int i=0;i<=(arr.length-1);i++)
{
//在[i,length-1]的范围内找到最小值的位置
int minIndex=i;
for(int j=i;j<=(arr.length-1);j++)
{
//放minIndex位置上的数和j位置上的数比较
if(arr[minIndex]>arr[j])
{
//将j赋值给minIndex
minIndex=j;
}
}
//交换i和minIndex位置上信息
int temp = arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
System.out.println(Arrays.toString(arr));
}
}