1. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3编程找出1000以内的所有完数。
class WanShu
{
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++;
}
}
}
}
2. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
class TanQiu
{
public static void main(String[] args)
{
double h1=100;//第1次开始下落的高度
double high = h1/2;//第1次反弹的高度
double sum=0;
for(int i=1; i<=10; i++)
{
//从第1次反弹开始,到第10次落地,共10次反复
//后一次是前一次高度的一半
sum = high*2+sum;
high = high/2;
}
//共经过的距离要加上开始下落的100米
System.out.println("第10次落地共经过:"+(sum+100)+"米");
//第10次弹起的高度是第11次的一倍
System.out.println("第10次弹起:"+(high*2)+"米");
}
}
3. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
class SuZhi
{
public static void main(String[] args)
{
for (int i = 1; i <= 4; i++)
{
for (int j = 1; j <= 4; j++)
{
if (j == i)
{
continue;
}
for (int k = 1; k <= 4; k++)
{
if (k == i || k == j)
{
continue;
}
for (int m = 1; m <= 4; m++)
{
if (m == i || m == j || m == k)
{
continue;
}
System.out.println(i * 1000 + j * 100 + k * 10 + m);
}
}
}
}
}
}
4. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
class PingFangSu
{
public static void main(String[] args)
{
for(int i=100000; i>0; i--)
{
//使用Math.sqrt开平方
//%1==0判断是否为整数
if(Math.sqrt(i+100)%1==0)
{
if(Math.sqrt(i+100+168)%1==0)
{
System.out.println(i+"是完全平方数");
}
}
}
}
}
5. 输入某年某月某日,判断这一天是这一年的第几天?
分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
class TianSu
{
public static void main(String[] args)
{
int yy=2017;
int mm=3;
int dd=27;
switch(mm-1) //用之前各个月的天数,加上本月的天数
{
case 11:
dd=dd+30;
case 10:
dd=dd+31;
case 9:
dd=dd+30;
case 8:
dd=dd+31;
case 7:
dd=dd+31;
case 6:
dd=dd+30;
case 5:
dd=dd+31;
case 4:
dd=dd+30;
case 3:
dd=dd+31;
case 2:
dd=dd+28;
case 1:
dd=dd+31;
}
if(yy%4==0&&yy%100!=0||yy%400==0)
{
dd=dd+1; //如果是闰年再加1天
}
System.out.println("是"+yy+"的第"+dd+"天");
}
}
6. 打印出如下图案
*
***
******
********
******
***
*
分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
class LingXing
{
public static void main(String[] args)
{
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 = 0; j < m; j++)
{
System.out.print("*");
}
System.out.println();
}
}
}
7. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
分析:抓住分子与分母的变化规律。
class FenSu
{
public static void main(String[] args)
{
double fz = 2.0;
double fm = 1.0;
double sum = 0.0;
for(int i=1; i<=20; i++)
{
System.out.println(fz+"/"+fm);
sum = sum+(fz/fm);
double t = fz;
fz = fz+fm;
fm = t;
}
System.out.println(sum);
}
}
8. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁) ,再往回推。
class NianLing
{
public static void main(String[] args)
{
int age = 10;
for(int i=2; i<=5; i++)
{
age = age+2;
}
System.out.println("第5个人的年龄是"+age);
}
}
9. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
class HuiWen
{
public static void main(String[] args)
{
for (int i = 10000; i <= 99999; i++)
{
int gw = i % 10; //个位
int ww = i / 10000; //万位
int sw = (i / 10) % 10; //十位
int qw = (i / 1000) % 10; //千位
if ((gw == ww) && (sw == qw))
{
System.out.println(i+"是回文");
}
}
}
}
10. 打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
class YangHui
{
public static void main(String[] args)
{
int n = 10; //打印10行的杨辉三角形
int i = 0;
int j = 0;
int[][] arr = new int[n][n];
arr[0][0] = 1; //第0行特殊处理
for (i = 1; i < n; i++) //从第1行开始,到第n行结束
{
arr[i][0] = 1; //每行的头尾固定为1
arr[i][i] = 1;
for (j = 1; j < i; j++) //从第2列开始,到第i-1列
{
//每个元素等于:上一行的上一列 + 上一行的该列
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
//输出
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}