题目来源:https://blog.csdn.net/qiucaijuan/article/details/6650925
记录做的题目,附上自己的思路。
题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
直观上并没有很明显的规律,先列举出前几个月的月份和兔子数看看
观察可知兔子数的规律为1,1,2,3,5,8,13,21...即为斐波那契数列
public class question01 {
public static void main(String arg[]){
int i;
long arr[]=new long[26];
arr[0]=arr[1]=1;
System.out.println("第1个月的兔子有1对,"+"总共是"+2+"只");
System.out.println("第2个月的兔子有1对,"+"总共是"+2+"只");
for (i=2;i<=35;i++)
{
arr[i]=arr[i-1]+arr[i-2];
System.out.println("第"+i+"个月的兔子有"+arr[i]+"对,"+"总共是"+2*arr[i]+"只");
}
}
}
题目2:判断101-200之间有多少个素数,并输出所有素数。
素数的定义为只能被1或者自身整除的数字
所以可以用这个数分别去除从2到自身的所有数字
如果能整除,则表示不是素数,否则是素数
public class question02 {
public static void main(String arg[]) {
int n = 0;//记录素数个数
for (int i = 100; i < 200; i++) {
if (isPrime(i)) {
System.out.print(i + " ");
n++;
}
}
System.out.println("素数的个数为:" + n);
}
//判断是否为素数的部分
private static boolean isPrime(int i) {
for (int j = 2; j < Math.sqrt(i); j++) {
if (i % j == 0){
return false;
}
}
return true;
}
}
题目3:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
分别将三位数的各个位数的立方加起来判断是否原来的数字即可。
用%实现取各个位数
public class question03 {
public static void main(String[] args){
int n=0;//水仙花总数
for (int i=100;i<1000;i++){
int a=i%10; //个位上的数字
int b=i/10%10; //十位上的数字
int c=i/100; //百位上的数字
if(a*a*a+b*b*b+c*c*c==i) {
System.out.print(i + " ");
n++;
}
}
System.out.println("水仙花的个数为:"+n);
}
}
题目4:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
先找到最小的质数,如果是这个数字自身,则输出,否则判断能否被整除
取一个比n小的数字i,如果n能被i整除,输出i,并用结果作为新的n,重复第一步
如果n不能被i整除,则i=i+1,重复第一步
public class question04 {
public static void main(String[] args){
System.out.print("请输入一个正整数:");
Scanner scanner=new Scanner(System.in);
int input=scanner.nextInt();
System.out.print(input+"=");
//取i,判断能否被整除
for(int i=2;i<input+1;i++){
while(input%i==0&&input!=i){
input=input/i;
System.out.print(i+"*");
}
//是这个数字自身则结束
if(input==i){
System.out.print(i);
break;
}
}
scanner.close();
}
}
题目5:利用条件运算符的嵌套来完成此题
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
简单题。。
public class question05 {
public static void main(String[] args){
System.out.print("请输入你的分数:");
Scanner scanner= new Scanner(System.in);
int input=scanner.nextInt();
String belong=input>=90?"A":(input>=60?"B":"C");
System.out.println(input+"分属于"+belong+"等级");
scanner.close();
}
}
题目6:输入两个正整数m和n,求其最大公约数和最小公倍数。
先求最大公约数,再求最小公倍数
用大数对小数求余
将小数赋值给大数,把求余的结果赋值给小数
循环直到求余结果为0
被求余的数就是最大公约数
public class question06 {
public static void main(String[] args) {
int max = 0;//最大公约数
int min = 0;//最小公倍数
System.out.print("输入两个人整数:");
Scanner scanner = new Scanner(System.in);
int input1 = scanner.nextInt();
int input2 = scanner.nextInt();
min = input1 * input2;
int temp = 1;//暂时中间数
//保证输入的第一个数大于第二个数
if (input2 > input1) {
temp = input1;
input1 = input2;
input2 = temp;
}
while (temp != 0) {//循环结束的条件为求余结果不为零
temp=input1%input2;
input1=input2;
input2=temp;
}
max=input1;//结束循环时,求雨结果为0.被求余的数为最大公约数
min=min/max;
System.out.println("最大公约数为:"+max);
System.out.println("最小公倍数为:"+min);
}
}
题目7:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
nextLine()获取一行字符串
把字符串的字符赋值到一个数值中
对比数值在ASK码的范围来确定符号类别
public class question07 {
public static void main(String[] args){
int letter=0;
int space=0;
int num=0;
int others=0;
System.out.println("输入一串字符:");
Scanner scanner=new Scanner(System.in);
String string=scanner.nextLine();//获取一行字符串
char[]arr=string.toCharArray();
for(int i=0;i<arr.length;i++){
if(arr[i]>=48&arr[i]<=57){
num++;
}
else if((arr[i]>=65&arr[i]<=90)||(arr[i]>=97&arr[i]<=122)){
letter++;
}
else {
others++;
}
}
System.out.println(("数字"+num+"个,字母"+letter+"个,空格"+space+"个,其他"+others+"个")
);
scanner.close();
}
}
题目8:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
输出结果的形式如:2+22+222=246;
将数字a用for循环到位数等于b即可
public class question08 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入循环数字a的值:");
int a = scanner.nextInt();
System.out.print("输入位数b的值:");
int b = scanner.nextInt();
int s=0,t=0;
for(int i=0;i<=b;i++){
t+=a;
a=a*10;
s+=t;
}
System.out.println(s);
}
}
题目9:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程找出1000以内的所有完数。
首先要知道,因数不会大于本身的一半,如48的最大因数为24,100的最大因数为50
先判断所有因数是否和输入值相等,相等则输出
用for循环嵌套求因数
public class question09 {
public static void main(String[] args){
System.out.println("1000内的因数为:");
Scanner scanner=new Scanner(System.in);
for(int i=1;i<=1000;i++){
int sum=0; //sum表示因数和
for(int j=1;j<i/2+1;j++){ //因数不会大于本身的一半
if(i%j==0)
sum=sum+j;
if(i==sum)
System.out.print(i+" ");
}
}
}
}
题目10:一球从h米高度自由落下,每次落地后反跳回原高度的一半;
再落下,求它在 第n次落地时,共经过多少米?第n次反弹多高?
物理题...
public class question10 {
public static void main(String[] args) {
System.out.println("请输入小球下落的高度和落地的次数:");
Scanner scanner=new Scanner(System.in);
float h=scanner.nextFloat();
float n=scanner.nextFloat();
float sum=h;
h/=2;
for(int i=2;i<=n;i++){
sum+=h*2; //经过距离
h/=2; //反弹高度
}
System.out.println("在"+100+"米,经过"+n+"次能反弹"+h+"米,经过"+sum+"米");
scanner.close();
}
}