【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
public class Prog11{
public
static void main(String[] args){
int
count=0;
int
n=0;
for(int
i=1;i<5;i++) {
for(int
j=1;j<5;j++) {
if(ij)
{
continue;
}
for(int
k=1;k<5;k++) {
if(k!=i&&k!=j)
{
n=i100+j10+k;
System.out.print(n+"
");
count++;
if(count%50)
{
System.out.println();
}
}
}
}
}
System.out.println();
System.out.println(“符合条件的数共:”+count+“个”);
}
}
【程序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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
import java.io.;
public class Prog12{
public
static void main(String[] args){
public
static void main(String[] args){
Scanner
sc=new Scanner(System.in);
System.out.println(“请输入利润:”);
double
pro=sc.nextDouble();
double
profit;
if(pro<=100000)
{
profit=pro0.1;
}else
if(pro>100000&&pro<=200000) {
profit=(pro-100000)0.075+1000000.1;
}else
if(pro>200000&&pro<=400000) {
profit=(pro-200000)0.05+2000000.075;
}else
if(pro>400000&&pro<=600000) {
profit=(pro-400000)0.03+4000000.05;
}else
if(pro>600000&&pro<=1000000) {
profit=(pro-600000)0.015+6000000.03;
}else
{
profit=(pro-1000000)0.01+10000000.015;
}
System.out.println(“奖金:”+profit);
}
}
【程序13】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
public class Prog13{
public static void main(String[] args){
int
n=100000;
int
x = 0;
System.out.print(“所求的数是:”);
for(int
i=1;i<=n;i++) {
if(isCompSqrt(i+100)&&isCompSqrt(i+268))
{
x=i;
System.out.print(x+"
");
}
}
}
public
static boolean isCompSqrt(int n) {
boolean
isComp=false;
for(int
i=1;i<Math.sqrt(n)+1;i++) {
if(n==Math.pow(i,
2)) {
isComp=true;
}
}
return
isComp;
}
}
【程序14】题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
import java.util.Scanner;
public class Prog14{
public
static void main(String[] args){
Scanner
sc=new Scanner(System.in);
System.out.println(“请输入年月日:”);
int
year=sc.nextInt();
int
month=sc.nextInt();
int
day=sc.nextInt();
int
n=SumDay(year,month,day);
System.out.println(“这一天是”+year+“年的第”+n+“天”);
}
public
static int SumDay(int year,int month,int day) {
int
x=0;
int
[] date= {0,31,28,31,30,31,30,31,31,30,31,30};
if((year%40&&year%100!=0)||(year%4000))
{
date[2]=29;
}
for(int
i=0;i<month;i++) {
x+=date[i];
}
return
x+day;
}
}
【程序15】题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,使x最小。
import java.util.Scanner;
public class Prog15{
public
static void main(String[] args){
Scanner
sc=new Scanner(System.in);
System.out.println(“请输入三个数:”);
int
x=sc.nextInt();
int
y=sc.nextInt();
int
z=sc.nextInt();
System.out.println(“排序结果为:”);
sort(x,y,z);
}
public
static void sort(int x,int y,int z) {
int
temp;
if(x>y)
{
temp=x;
x=y;
y=temp;
}
if(x>z)
{
temp=x;
x=z;
z=temp;
}
if(y>z)
{
temp=y;
y=z;
z=temp;
}
System.out.println(x+"
“+y+” "+z);
}
}
【程序16】题目:输出9*9口诀。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
public class Prog16{
public
static void main(String[] args){
for(int
i=1;i<10;i++) {
for(int
j=1;j<=i;j++) {
System.out.print(j+""+i+"="+(ij)+"\t");
}
System.out.println();
}
}
}
【程序17】题目:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。
public class Prog17{
public
static void main(String[] args){
int
m=1;
for(int
i=9;i>0;i–) {
System.out.println(“第”+i+“天后还剩”+m+“个桃”);
m=(m+1)*2;
}
System.out.println(“小猴子摘了”+m+“个桃子”);
}
}
【程序18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
import java.util.ArrayList;
public class Prog18{
public
static void main(String[] args){
char
i,j,k;
for(
i=‘x’;i<=‘z’;i++) {
for(
j=‘x’;j<=‘z’;j++) {
if(i!=j)
{
for(
k=‘x’;k<=‘z’;k++) {
if(j!=k&&i!=k)
{
if(i!=‘x’&&k!=‘x’&&k!=‘z’)
{
System.out.println(“a–>”+i+"
b–>"+j+" c–>"+k);
}
}
}
}
}
}
}
}
【程序19】题目:打印出如下图案(菱形)
*
***
*****
*******
*****
***
*
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。
public class Prog19{
public
static void main(String[] args){
for(int
i=1;i<5;i++) {
for(int
k=1;k<=4-i;k++) {
System.out.print("
“);
}
for(int
j=1;j<=2i-1;j++) {
System.out.print("”);
}
System.out.println();
}
for(int
i=0;i<3;i++) {
for(int
j=0;j<i+1;j++) {
System.out.print("
“);
}
for(int
k=0;k<=4-2i;k++) {
System.out.print("”);
}
System.out.println();
}
}
}
【程序20】题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
public class Prog20{
public
static void main(String[] args){
double
a=2;
double
b=1;
double
s=0;
double
t;
for(int
i=0;i<20;i++) {
s+=a/b;
t=a;
a=a+b;
b=t;
}
System.out.println(s);
}
}