【程序6】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
暴力求解发:
public class IntMaxGyMinGb {
/**
* @param args
* 最大公约数:两个数的最小约数之积
* 最小公倍数:两个数的最小约数与最小余数之积a
*/
//最大公约数
public static int f1(int num1,int num2)
{
//假设最大公约数是i
int i;
i = num1>num2?num2:num1;
for(; i>=1;i--){
if(num1 % i == 0&& num2 % i == 0){
break;
}
}
return i;
}
//最小公倍数
public static int f2(int num1, int num2)
{
//假设最小公倍数是i
int i;
for(i =num1>num2?num1:num2; i<= num1*num2; i++)
{
if(i % num2 == 0&& i % num1 == 0){
break;
}
}
return i;
}
public static void main(String[] args) {
int num1 = 12;
int num2 = 18;
//最大公约数
System.out.println(num1+"与"+num2+"的最大公约数是:"+f1(12,18));
//最小公倍数胡
System.out.println(num1+"与"+num2+"的最小公倍数是:"+f2(12,18));
}
}
【程序7】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用while语句,条件为输入的字符不为'\n'.
正在打脑壳中……
【程序8】
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:关键是计算出每一项的值。
import java.util.Scanner;
public class Getaaaa {
/**
* 样例:求和
* 2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
*/
public static void main(String[] args) {
Scanner sc = newScanner(System.in);
//数字
System.out.println("请输入需要重复相加的数字:");
int num =sc.nextInt();
//重复数字
int num1 = 0;
System.out.println("请输入需要重复的长度:");
//数字长度
int length =sc.nextInt();
//保存每项重复数字
int[] sum = new int[length];
//相加结果
int result = 0;
for(int i=0; i<length;i++)
{
num1 = num1*10+num;
sum[i] = num1;
// System.out.println(sum[i]);
result += sum[i];
}
【程序9】
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
public class Wanshu {
/*
* 一个数的因子:
* 比如28
*28=1*28
*28=2*14
*28=4*7
* 除了本身以外的可以整除的数
* 所以28的因子有
* 1 24 7 14
*/
public static void main(String[] args) {
int num_length =10000;
System.out.println(num_length+"内的完数:");
//其实从1~10000(包含10000)
for(int i=1; i<num_length+1; i++)
{
int sum = 0;
//j<i/2+1 折半算法 当j=i+1 的时候就退出循环没必要将i都遍历完
for(int j=1; j<i/2+1; j++)
{
//判断最小约数
if(i % j == 0){
sum += j;
if(sum == i){
System.out.print(sum+"\t");
}
}
}
}
}
}
【程序10】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
public class BallBounce {
/**
* @param args
*/
public static void main(String[] args) {
//开始100m 反弹十次 求经过了多少米?第十次谈了多高?
//第十次谈了多高 = 连续十次beginHeight/2
//经过了多少米 = beginHeight+每次beginHeight/2
f(100,10);
}
/**
* 需要注意的是最终球经过的距离要加上最初的高度100m
* @param ballHeight 球的高度
* @param count 反弹的次数
*/
public static void f(double ballHeight,int count){
double ballLong = 0;//球共经过的距离
for(int i=0; i<count; i++) //循环的次数就是反弹的次数
{
ballLong += ballHeight;
ballHeight /= 2;
}
System.out.println("最后一次弹起的高度为"+ballHeight+"m\n在此期间求一共经过了"+(ballLong+100)+"m");
}
}