5道Java算法编程题(二)
【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
import java.util.Scanner;
public class Demo06 {
public static void main(String[] args){
int a,b,m,n;
Scanner in=new Scanner(System.in);
System.out.println("请输入一个正整数:");
a=in.nextInt();
System.out.println("再输入一个正整数:");
b=in.nextInt();
commonDivisor use=new commonDivisor();
m=use.commonDivisor(a,b);
n=a*b/m;
System.out.println("最大公约数:"+m);
System.out.println("最小公倍数:"+n);
}
}
class commonDivisor{
public int commonDivisor(int x,int y){
if(x<y){
int t=x;
x=y;
y=t;
}
while(y!=0){
if(x==y)return x;
else{
int k=x%y;
x=y;
y=k;
}
}
return x;
}
}
【程序7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用for循环语句,if条件语句。
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args){
System.out.println("请输入一个字符串:");
Scanner in=new Scanner(System.in);
String str=in.nextLine();
char[] ch=str.toCharArray();
count use=new count();
use.count(ch);
}
}
class count{
int digital,character,blank,other;
public void count(char[] arr){
for(int i=0;i<arr.length;i++){
if(arr[i]>='0'&&arr[i]<='9'){
digital++;
}else if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')){
character++;
}else if(arr[i]==' '){
blank++;
}else{
other++;
}
}
System.out.println("数字个数:"+digital);
System.out.println("英文字母个数:"+character);
System.out.println("空格个数:"+blank);
System.out.println("其他字符个数:"+other);
}
}
【程序8】 题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。
import java.util.Scanner;
public class Demo08 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println(请输入a的值);
int a = in.nextInt();
System.out.println(请输入n个数);
int n = in.nextInt();
int s = 0,t=0;
for (int i = 1; i <= n; i++) {
t += a;
a = a*10;
s += t;
}
System.out.println(s);
}
}
【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程找出1000以内的所有完数。
public class Demo09 {
public static void main(String[] args) {
int s;
for (int i = 1; i <= 1000; i++) {
s = 0;
for (int j = 1; j < i; j++)
if (i % j == 0)
s = s + j;
if (s == i)
System.out.print(i + " " );
}
System.out.println();
}
}
或
public class Demo09{
public static void main(String[] args) {
int i,j,sum;
for(i=1;i<1000;i++)
{
sum = 0;
for(j=1;j<=i/2;j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum==i)
{
System.out.print(i+" its factors are: ");
for(j=1;j<=i/2;j++)
{
if(i%j==0)
System.out.print(j+", ");
}
System.out.println();
}
}
}
}
【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
public class Demo10 {
public static void main(String[] args) {
double s = 0;
double h = 100;
for (int i = 1; i <= 10; i++) {
s += h;
h = h/2;
s += h;
}
System.out.println("经过路程:"+s);
System.out.println("反弹高度:"+h);
}
}
- 赞