1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
public class Question2 {
public static void main(String[] args) {
int month = 36;
int[] arrays = new int[36];
arrays[0] = 1;
arrays[1] = 1;
arrays[2] = 2;
for(int i=3; i<36; i++){
arrays[i] = arrays[i-1] + arrays[i-2];
}
for(int i=0; i<36; i++){
System.out.println("第"+(i+1)+"个月有"+arrays[i]+"只兔子");
}
}
}
【程序2】
则表明此数不是素数,反之是素数。
public class FiftyQuestion1 {
public static void main(String[] args){
int count = 0;
//找出1到200的质数并输出
for(int i=2; i<=200; i++){
boolean isPrime = true;
for(int j=1; j<=Math.sqrt(i); j++){
if(i%j==0 && i!=j && j!=1){
isPrime=false;
break;
}
}
if(isPrime){
++count;
System.out.println("第"+count+"个质数:"+i);
}
}
}
}
【程序3】
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
public class Question3 {
public static void main(String[] args){
int[] digits = new int[3]; //位数:百、十、个
int[] pows3 = new int[3];
for(int i=100; i<=999; i++){
digits[0] = i/100; //百位
digits[1] = i/10 - 10*digits[0]; //十位
digits[2] = i%10;
pows3[0] = (int)Math.pow(digits[0],3);
pows3[1] = (int)Math.pow(digits[1],3);
pows3[2] = (int)Math.pow(digits[2],3);
if(pows3[0]+pows3[1]+pows3[2] == i){
System.out.println("数字"+i+"是水仙花数");
}
}
}
}
【程序4】
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public class Question4 { //寻找小于limit的质数列表 public List【程序5】defactor(int limit){ List i++){ if(numTmp % factors.get(i)==0){ facList.add(factors.get(i)); numTmp = numTmp / factors.get(i); break; } } } //输出结果 System.out.print(num + "="); for(int i=0; ilist = new ArrayList (); for(int i=2; i<=1000; i++){ if(isPrime(i)&&i<=limit/2){ list.add(i); } } return list; } //判断是否为质数 public boolean isPrime(int num){ boolean flag = true; for(int i=2; i<=num; i++){ flag = true; for(int j=1; j<=Math.sqrt(i); j++){ if(i%j==0 && i!=j && j!=1){ flag=false; break; } } } return flag; } public static void main(String[] args){ Scanner in = new Scanner(System.in); Question4 ques = new Question4(); List factors; List facList = new ArrayList (); System.out.println("输入1000以内的整数:"); int num = in.nextInt(); int numTmp = num; factors = ques.defactor(num); //找出输入数字的质数列表 //核心逻辑 while(numTmp!=1){ for(int i=0;i ; 1;i++){ System.out.print(facList.get(i)+"*"); } System.out.print(facList.get(facList.size()-1)); } }
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
public class Question5 {
public static void main(String[] args){
System.out.println("请输入成绩:");
Scanner in = new Scanner(System.in);
int score = in.nextInt();
System.out.print(score < 90 ? (score < 60 ? 'C' : 'B') : 'A');
}
}
【程序6】
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
public class Question7 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入一句话,可以由数字、字母、空格、符号组成:"); String s = in.nextLine(); int let = 0; int num = 0; int space = 0; int sym = 0; for(int i=0; i【程序8】; i++) { int c = s.charAt(i); if (c>=48&&c<=57) { ++num; } else if (c >= 65 && c <= 90 || c >= 97 && c <= 122) { ++let; } else if (c == 32) { ++space; } else { ++sym; } } System.out.println("共输入字母" + let + "个," + "数字" + num + "个," + "空格" + space + "个," + "其他符号" + sym + "个。"); } }
1.程序分析:关键是计算出每一项的值。
public class Question8 { public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.println("请输入基数:"); int base = in.nextInt(); System.out.println("请输入位数:"); int digits = in.nextInt(); int sum = 0; int ai = 0; for(int i=0; i【程序9】; i++){ ai = 0; for(int j=0; j<=i; j++){ ai += base*(int)Math.pow(10,j); } sum += ai; System.out.print(ai+" "); } System.out.println("求和为:"+sum); } }
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
public class Question10 {
public static void main(String[] args){
double distance = 100;
double height = 100;
for(int i=1; i<10; i++){
distance += height;
height /= 2;
if(i == 9){
System.out.println("第"+(i+1)+"次反弹:"+ height);
}
}
System.out.println("总共经过"+distance+"米");
}
}
【程序11】
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:
public class Question13 { public static void main(String[] args){ int limit = 1000000; for(int i=0;i【程序14】; i++){ int num1 = i+100; int num2 = num1+168; double dnum1 = Math.sqrt(num1); double dnum2 = Math.sqrt(num2); if(num1-(int)dnum1*(int)dnum1==0 && num2-(int)dnum2*(int)dnum2 ==0){ System.out.println(i+"是"); } } } }
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
public class Question14 { static int[] month_days = {31,28,31,30,31,30,31,31,30,31,30,31}; public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.println("请输入日期,格式举例:2016-08-26"); String date = in.nextLine(); String[] dates = date.split("-"); int year = Integer.parseInt(dates[0]); int month = Integer.parseInt(dates[1]); int day = Integer.parseInt(dates[2]); int days = 0; //一年的第几天 //输入日期格式判断 if(year<1900||year>2050){ System.out.println("输入格式错误,年限不得超过1900-2050之间"); return; } else if(month<0||month>12){ System.out.println("输入格式错误,月份不得超过1-12之间"); return; } else if(day<0){ System.out.println("输入格式错误,天数不得为负"); return; } else if(day>Question14.month_days[month]){ System.out.println("输入格式错误,天数超过月份最大天数"); return; } //不是闰年 for(int i=0, t=month-1; i【程序15】; i++){ days += Question14.month_days[i]; } days += day; //闰年则加一 if((year%400==0 || (year%100!=0 && year%4==0))){ if(month>2){ ++days; } } System.out.println(date+"是一年的第"+days+"天"); } }
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
public class Question15 { //比较三个数字大小 public static int[] compare3Nums(int[] array){ int tmp; if(array[0]>array[1]){ tmp = array[0]; array[0] = array[1]; array[1] = tmp; } if(array[0]>array[2]){ tmp = array[0]; array[0] = array[2]; array[2] = tmp; } if(array[1]>array[2]){ tmp = array[1]; array[1] = array[2]; array[2] = tmp; } return array; } //输出数组内容 public static void printArray(int[] array){ for(int i=0; i【程序16】length ; i++){ System.out.print(array[i]+" "); } } public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.println("请输入三个数字:"); int[] nums = new int[3]; for(int i=0; ilength; i++){ nums[i] = in.nextInt(); } int[] comNums = Question15.compare3Nums(nums); System.out.println("从小到大排序:"); printArray(comNums); } }
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
public class Question16 {
public static void main(String[] args){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
System.out.print(i+"*"+j+"="+i*j+" ");
if (j==9){
System.out.println();
}
}
}
}
}
【程序17】
1.程序分析:采取逆向思维的方法,从后往前推断。
public class Question17 { public static void main(String[] args){ int day = 10; //10天 int rest = 1; //剩下一个 System.out.println("第1天总共有"+rest+"个桃子"); for(int i=1; i【程序18】; i++){ rest =rest*2+1; System.out.println("第"+(day-i)+"天总共有"+rest+"个桃子"); } System.out.println("第一天共摘了"+rest+"个桃子"); } }
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
1.程序分析:请抓住分子与分母的变化规律,先计算出数列的前n项。
public class Question20 {
public static void main(String[] args){
int[] array = new int[21];
//分子和分母规律相同,先计算出规律数列array的前21项
for(int i=0; i<21; i++){
if(i==0){
array[0]=1;
}
else if(i==1){
array[1]=2;
}
else{
array[i] = array[i-1]+array[i-2];
}
}
double sum = 0;
for(int i=0; i<20; i++){
double ai = (double)array[i+1]/(double)array[i];
sum += ai;
System.out.print(ai+" ");
}
System.out.println("\n前20项和是:"+sum);
}
}
【程序21】
1.程序分析:用二重for循环,求阶乘的和,先求出每一项阶乘再累加。注意需要用long,不能用int。
public class Question21 {
public static void main(String[] args){
long sum = 0L;
for(int i=1; i<=20; i++){
long num = 1L;
for(int j=1; j<=i; j++){
num *= j;
}
System.out.println("第"+i+"项为:"+num);
sum += num;
}
System.out.println("\n和为:"+sum);
}
}
【程序22】
1.程序分析:自身调用自身的函数,是递归函数。递归函数都有一个简单的出口。
public class Question22 {
public static long multi(int num){
if(num == 1){//递归出口
return 1;
}
else{
return num*multi(num-1);
}
}
public static void main(String[] args){
System.out.println("请输入计算阶乘的基数:");
Scanner in = new Scanner(System.in);
int radix = in.nextInt();
long num = multi(radix);
System.out.println(radix+"的阶乘是:"+num);
}
}
【程序23】
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
public class Question23 {
public static int calAge(int num){
if(num==1){
return 10;
}
else{
return calAge(num-1)+2;
}
}
public static void main(String[] args){
System.out.println("第五个人的年龄是:"+calAge(5));
}
}
【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:输入的数字不断除以10,整型做除法只会保留整数部分,所以判定条件为!=0.
public class Question24 {
//计算数字的位数
public static int calDigits(int num){
int digits = 0;
while (num!=0){
num /= 10;
++digits;
}
return digits;
}
public static void reverse(int num){
int tmp = 0;
while (num!=0){
tmp = num - (num/10)*10;
num /= 10;
System.out.print(tmp);
}
}
public static void main(String[] args){
System.out.println("请输入一个数字(小于五位):");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int digit = 0;
if(num<=0){
System.out.println("请输入正整数");
}
else if((digit=calDigits(num))>5){
System.out.println("请输入小于五位的数字");
}
else{
System.out.println("输入数字:"+num+",位数:"+digit);
}
System.out.print("逆序输出"+num+"结果是:");
reverse(num);
}
}
【程序25】
1.程序分析:用switch-case语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
public class Question26 {
static String[] weekdays = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
public static void main(String[] args){
System.out.println("请输入星期几(英文):");
for(int i=0; i<weekdays.length; i++){
System.out.print(weekdays[i]+" ");
}
System.out.println();
Scanner in = new Scanner(System.in);
String week = in.nextLine();
switch (week.charAt(0)){
case 'M':{
System.out.println("Monday,星期一");
break;
}
case 'W':{
System.out.println("Wednesday,星期三");
break;
}
case 'F':{
System.out.println("Friday,星期五");
break;
}
case 'T':{
if(week.charAt(1)=='u'||week.charAt(1)=='U'){
System.out.println("Tuesday,星期二");
}
else {
System.out.println("Thursday,星期四");
}
break;
}
case 'S':{
if(week.charAt(1)=='a'||week.charAt(1)=='A'){
System.out.println("Saturday,星期六");
}
else {
System.out.println("Sunday,星期日");
}
break;
}
}
}
}
【程序27】
题目:求100之内的素数
程序解析:代码复用的重要性。
public class Question27 { public static void findPrime(int limit) { if (limit <= 0) { return; } int count = 0; //找出1到limit的质数并输出 for (int i = 2; i <= limit; i++) { boolean isPrime = true; for (int j = 1; j <= Math.sqrt(i); j++) { if (i % j == 0 && i != j && j != 1) { isPrime = false; break; } } if (isPrime) { ++count; System.out.println("第" + count + "个质数:" + i); } } } public static void main(String[] args) { findPrime(100); } }【程序28】