1. 编程找出1000以内的所有完数。
for(int i=1; i<=1000; i++) //找出要处理的数
{
int sum = 0;
for(int j=1; j<i; j++) //找到因子
{
if(i%j==0) //如果能整除,表示这个j是该数的一个因子
{
sum = sum + j;
}
}
//程序运行到该行时,sum中保存的就是该数所有因子的和
if(i==sum)
{
System.out.println(i+"是一个完数");
}
}
2. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
求它在第10次落地时,共经过多少米?第10次反弹多高?
public static void main(String[] args)
{
double h1 = 100.0;
double high = h1/2; //第1次落下
double sum = 0.0;
for(int i=1; i<10; i++) //有规律的落下弹起共有9次
{
sum = high*2+sum; //high
high = high/2; //high /= 2;
}
System.out.println("第10次落下共经过"+(sum+100)+"米");
System.out.println("第10次反弹"+high+"米");
}
3. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
public static void main(String[] args)
{
int n=0;
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;
}
n++;
System.out.println(i*100+j*10+k);
}
}
}
System.out.println("这样的数共有"+n+"个");
}
4. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
public static void main(String[] args)
{
for(int i=1; i<=100000; i++)
{
if(Math.sqrt(i+100)%1==0)
{
if(Math.sqrt(i+100+168)%1==0)
{
System.out.println(i+"是所要找的整数");
}
}
/*
如下代码可以判断i是否为完全平方数
//开方运算要利用java提供数学库中的一个方法Math.sqrt()
t = Math.sqrt(i);
//浮点取模,用待处理的数不断的除模,直到余数小于这个数为止,
//得到的余数就是结果
t = t%1; //浮点对1取模会得到小数部分
if(t==0) //判断开方的结果是否为整数
{
}
*/
}
}
5. 输入某年某月某日,判断这一天是这一年的第几天?
分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
public static void main(String[] args)
{
int yy = 2017;
int mm = 5;
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;
}
//如果是闰年并且3月和之后的月份要加上1天
if(yy%4==0&&yy%100!=0||yy%400==0)
{
if(mm>=3)
{
dd++;
}
}
System.out.println("是这年的第"+dd+"天");
}
6. 打印出如下图案(菱形)
*
***
******
********
******
***
*
分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
7. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
分析:抓住分子与分母的变化规律。
public static void main(String[] args)
{
double fz = 2.0;
double fm = 1.0;
double sum = fz/fm;
for(int i=2; i<=20; i++)
{
System.out.println(fz+"/"+fm);
double t = fz; //防止过程中内容改变,先将分子保存起来
fz = fz+fm;
fm = t;
sum = sum + fz/fm;
}
System.out.println("前20项的和是:"+sum);
}
8. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。 问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁) ,再往回推。
public static int age(int n)
{
if(n==1)
{
return 10;
}
return age(n-1)+2;
}
public static void main(String[] args)
{
System.out.println("第1个人的年龄是:"+age(5));
// int a = 10;
//
// for(int i=2; i<=5; i++)
// {
// a = a+2;
// }
//
// System.out.println("第1个人的年龄是:"+a);
}
9. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
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
public static void main(String[] args)
{
int n = 10;
int[][] arr = new int[n][n];
//处第1个元素
arr[0][0] = 1;
for(int i=1; i<n; i++)
{
//每行的第0列和最后一列的元素固定为1
arr[i][0] = 1;
arr[i][i] = 1;
//将每行的第1列到每i-1列进行处理
//该元素 = 上一行的上一列元素 + 上一行的该列元素
for(int j=1; j<i; j++)
{
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
}
}
//输出结果
for(int i=0; i<n; i++)
{
for(int j=0; j<=i; j++)
{
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}

这篇博客主要展示了如何使用JAVA编写一个矩阵填充算法,该算法将1至n的平方数以特定规律填充到一个n×n的矩阵中。代码中详细解释了每一部分的功能,包括初始化矩阵、设置边界条件以及填充内部元素。最后通过遍历并打印矩阵来展示结果。

1645

被折叠的 条评论
为什么被折叠?



