本帖最后由 ゞ傀儡鮭鮭ぃ 于 2013-6-28 13:08 编辑
第一题
java代码:
class one
{
public static void main(String args [])
{
double sum = 0;
double a = 2.0;
double b = 1.0;
double c = 0; //分子为b 分母为a
for(double n=1; n<=20; n++)
{
sum+=(double)a/(double)b; //序列求和
c=a;
a+=b;
b=c; //求下一项序列
}
System.out.println("分数序列之和为"+sum);
}
}
程序分析:先观察出序列之间的联系,根据分子分母之间的变化关系,算出每一项,再利用for循环进行求和.
运行结果:
第二题
java代码:
class two{
static int getAge(int n)
{
if (n==1)
{
return 10; //第一个人年龄
}
return getAge(n-1)+2; //逆推,一次增加2年
}
public static void main(String[] args) {
System.out.println("第五个年龄为:"+getAge(5));//获取第五个人年龄
}
}
程序分析:利用递归,知道第五个人的年龄之后推第四个年龄,由此,知道第一个人年龄,再反推.
运行结果:
第三题
java代码:
class three{
public static void main(String [] args)
{
int n=1 ;//弹跳数
double s=100;//初始高度100米
double h=s/2;//第一次碰到地面反弹高度
for(n=1;n<10;n++){
s=s+h*2;//第n次落地经过多少米
h=h/2;//第n次反弹的高度
}
System.out.println("第"+n+"次落地经过"+s+"米");
System.out.println("第"+n+"次反弹"+h+"米");
}
}
//程序思路:这是绝对值小于1的无穷递缩等比数列,首项a1为100,公比q=1/2,路程求和极限,先用for循环求和,再把a10表示出来即可.
//运行结果 :
第四题
java 代码:
class four{
public static void main(String [] args)
{
int i=0;
int a=1;
int b=1;
int c=1;
for(a=1;a<=4;a++)
for(b=1;b<=4;b++)
for(c=1;c<=4;c++)//按顺序自动生成所有三个1234随机数的组合
if(a!=b&&b!=c&&c!=a&&i++!=0)//抽取互不相同且无重复数字的三位数
System.out.println("第"+i+"个数是:"+a+""+b+""+c);
System.out.println("有"+i+"个");
}
}
//程序思想:先按顺序自动生成所有三个1234随机数的组合,再根据互不相同且无重复数字的条件逐步筛选,并计算出组合数个数,打印输出.
运行结果:
第五题
java代码:
import java.util.*;
class five{
public static void main(String [] args){
System.out.println("java分解正整数质因数案例");
System.out.println("请输入一个合适的正整数,并按Enter确认");
Scanner sc=new Scanner(System.in);
int Num=sc.nextInt();
//首先,我们需要得到,输入的这个数Num的一半以内的所有质数
Vector<Integer> vec=new Vector<Integer>();
Lab:for(int i=2;i<=Num;i++){
for(int j=2;j<=i/2;j++){
if(i%j==0&&i!=2){//说明能被整除,则i不是质数
continue Lab;
}
}
//内层for正常完成后,说明i是质数
vec.add(i);//添加到列表
}
//下面开始分解质因数
System.out.println(Num+"的分解结果是:\n");
System.out.print(Num+"=");
int theNum=Num;
boolean help=true;
for(int k=0;k<vec.size();k++){
int zhi=(int)vec.get(k);
if(theNum<zhi)
break;
if(theNum%zhi==0){//说明能被整除,则zhi就是Num的一个质因数
if(help==true){
System.out.print(zhi);
help=false;
}else{
System.out.print("*"+zhi);
}
k--;//因为,完全有可能Num还能被zhi整除,
//所以重新执行一遍
theNum=theNum/zhi;
}
}
}
}
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。运行结果:
第六题
java代码:
import java.util.*;
class six{
public static void main(String[] args) {
int a ,b,m;
Scanner s = new Scanner(System.in);
System.out.print( "键入一个整数: ");
a = s.nextInt();System.out.print( "再键入一个整数: ");
b = s.nextInt();
// new 一个类 目的是调用类中的方法 deff
deff cd = new deff();
// 调用类中的方法 deff 获得最大公约数
m = cd.deff(a,b);
// 计算最小公倍数
int n = a * b / m;
System.out.println("最大公约数: " + m);
System.out.println("最小公倍数: " + n);
}
}class deff {
public int deff(int x, int y) {
int t;
// 如果x<y 则将x和y的值互换
if (x < y) {
t = x;
x = y;
y = t;
}
//程序执行到这里 x肯定大于或者等于y
while (y != 0) {
// 如果x和y相等,那么他们的最大公约数是x
if (x == y){
return x;
}
// 当x和y不相等的时候 将y的值赋值给x 将原x的值和y的余数赋值给y
// 这时候x依然大于或者等于y 接着进行下一轮计算
// 一直循环下去,当k为0的时候,x就是最大公约数了
else {
int k = x % y;
x = y;
y = k;
}
}
return x;
}
}
程序设计:利用辗转相除法,先输入两个随机正数,然后通过数学思想求出最大公约数和最小公倍数.
运算结果:
|