JAVA经典算法40题 (二)

2014-11-24 11:45:02 · 作者: · 浏览: 56
Int(); a=23; int b=32; int c = gcd(a, b);
System.out.println("最小公倍数:" + a * b / c + "\n最大公约数:" + c);
}}
【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为 '\n '.
import java.util.Scanner; public class ex7 { public static void main(String args[])
{
System.out.println("请输入字符串:");
Scanner scan=new Scanner(System.in);
String str=scan.next();
String E1="[\u4e00-\u9fa5]";
Sintrting E2="[a-zA-Z]"; countH=0; int countE=0; char[] arrChar=str.toCharArray();
String[] arrStr=new String[arrChar.length]; for (int i=0;i {
arrStr[i]=String.valueOf(arrChar[i]);
}for (String i: arrStr )
{if (i.matches(E1))
{
countH++;
}if (i.matches(E2))
{
countE++;
}
}
System.out.println("汉字的个数"+countH);
System.out.println("字母的个数"+countE);
}
}
【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相
加有键盘控制。
1.程序分析:关键是计算出每一项的值。
import java.io.*; public class Sumloop { public static void main(String[] args) throws IOException
{ int s=0;
String output="";
BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入a的值");
Sfotrring input =stadin.readLine(); (int i =1;i<=Integer.parseInt(input);i++)
{
ionuttput+=input; a=Integer.parseInt(output);
s+=a;
}
System.out.println(s);
}
}
另解:
import java.io.*; public class Sumloop { public static void main(String[] args) throws IOException
{ int s=0; int n; int t=0;
BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));
String input = stadin.readLine();
fno=rInteger.parseInt(input); (int i=1;i<=n;i++){
t=t*10+n;
s=s+t;
System.out.println(t);
}
System.out.println(s);
}
}
【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程找出1000以内的所有完数。
public class Wanshu { public static void main(String[] args)
{ int s; for(int i=1;i<=1000;i++)
{
fs=o0r;(int j=1;j if s=s+j; (s==i)
System.out.print(i+" ");
}
System.out.println();
}
}
【程序10】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹
多高?
public class Ex10 { public static void main(String[] args)
{ double s=0; double t=100; for(int i=1;i<=10;i++)
{
s+=t;
t=t/2;
}
System.out.println(s);
System.out.println(t);
}
}
【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
public class Wanshu { public static void main(String[] args)
{ int i=0; int j=0; int k=0; int t=0; for(i=1;i<=4;i++) for(j=1;j<=4;j++) for(k=1;k<=4;k++) if(i!=j && j!=k && i!=k)
{t+=1;
System.out.println(i*100+j*10+k);
}
System.out.println (t);
}
}
【程序12】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万
元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高
于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从
键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
import java .util.*; public class test { public static void main (String[]args){
double sum;//声明要储存的变量应发的奖金
Scanner input =new Scanner (System.in);//导入扫描器
System.out.print ("输入当月利润");
double lirun=input .nextDouble();//从控制台录入利润
if(lirun<=100000){
sum=lirun*0.1;
}else if (lirun<=200000){
sum=10000+lirun*0.075;
}else if (lirun<=400000){
sum=17500+lirun*0.05;
}else if (lirun<=600000){
sum=lirun*0.03;
}else if (lirun<=1000000){
sum=lirun*0.015;
} else{
sum=lirun*0.01;
}
System.out.println("应发的奖金是"+sum);
}
}
后面其他情况的代码可以由读者自行完善.
【程序13】
题目:一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体