1、古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三 个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?这是一个菲波拉契数列问题
public class No1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入要计算的月份数:");
int N = sc.nextInt();//月份
int[] sum = new int[N];
for(int i = 0; i < N; i++){
if(i == 1 || i == 0){
sum[i] = 1;
System.out.println("第"+ (i+1) +"个月有"+ sum[i] +"对兔子");
}
else{
sum[i] = sum[i - 1] + sum[i - 2];
System.out.println("第"+ (i+1) +"个月有"+ sum[i] +"对兔子");
}
}
}
}
2、判断 101-200 之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除, 则表明 此数不是素数,反之是素数。
public static void main(String[] args) {
int count = 0;
int j = 0;
for(int i = 101; i < 200; i++){
for ( j = 2; j < i; j++) {
// 如果j能被i整除就跳出循环
if (i % j == 0)
break;
}
//判断循环是否提前跳出,如果j
if ( j >= i) {
count++;
System.out.println("素数为:"+ i);
}
}
System.out.println("101-200之间有"+ count +"个素数");
}
}
3、打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和 等于该数本身。例如:153 是一个 "水仙花数 ",因为 153= 1的三次方+5的三次方+3的 三次方。
public class No3 {
public static void main(String[] args) {
System.out.print("水仙花数: ");
for(int i = 1; i <= 9; i++){
for(int j = 0; j <= 9; j++){
for(int k = 0; k <= 9; k++){
int num = i * 100 + j * 10 + k;
if(num == i*i*i + j*j*j + k*k*k){
System.out.print(num+"\t");
}
}
}
}
}
}
4、将一个正整数分解质因数。例如:输入 90,打印出 90=233*5。 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成:
*(1)如果这个质数恰等于 n,则说明分解质因数的过程已经结束,打印出即可。
*(2)如果 n <> k,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数 你n,重复执行第一步。
*(3)如果 n 不能被 k 整除,则用 k+1 作为 k 的值,重复执行第一步。
public class No4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.print(N + " = ");
//循环判断
for (int k = 2; k <= N; k++) {
while (N != k) {
if (N % k == 0) {
System.out.print(k + "*");
N = N / k;
} else {
break;
}
}
}
System.out.print(N); // 打印出最后一个数
}
5、利用条件运算符的嵌套来完成此题:学习成绩> =90 分的同学用 A 表示,60-89 分之 间的用 B 表示,60 分以下的用 C 表示。
public class No5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入成绩:");
int num = sc.nextInt();
if(num > 100 || num < 0){
System.out.println("数据有误,请输入0—100的数据。");
}
else{
String grade = (num >= 90) ? "A" : (num >= 60) ? "B" : "C";
System.out.println(grade);
}
}
}
}
6、输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 /*在循环中,只要除数不等于 0,用较大数除以较小的数,将小的一个数作为下一轮循环的 大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为 0,返回较大 的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。 /
public class No6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个正整数 m 和 n");
int m = sc.nextInt();
int n = sc.nextInt();
int max = run(m,n);
System.out.println("最大公约数:" + max);
int min = m * n / max;
System.out.println("最小公倍数为:" + min);
}
public static int run(int m, int n) {
//判断大小交换位置 使m > n
if (m < n) {
int t = m;
m = n;
n = t;
}
while (n != 0) {
//如果两个数相等 就返回它本身
if (m == n)
return m;
else {
int k = m % n;
m = n;
n = k;
}
}
return m;
}
}
7、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
public class No7 {
public static void main(String[] args){
System.out.println("请输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数");
tiqv();
}
private static void tiqv() {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int num = 0,kong = 0,zimu = 0,other = 0;
//将字符串转化为字符数组
char[] charr = str.toCharArray();
for(int i = 0; i < charr.length; i++){
//Character.isDigit判断数组中是否有数字
if(Character.isDigit(charr[i])){
num++;
}
//Character.isSpaceChar判断数组中是否有空格
else if(Character.isSpaceChar(charr[i])){
kong++;
}
//Character.isLetter判断字符数组中的字母
else if(Character.isLetter(charr[i])){
zimu++;
}else{
other++;
}
}
System.out.println("英文字母有:" + zimu + "个");
System.out.println("空格有:" + kong + "个");
System.out.println("数字有:" + num + "个");
System.out.println("其他字符有:" + other + "个");
}
}
8、求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222(此 时共有 5 个数相加),几个数相加有键盘控制。
public class No8 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要相加的数字a(0--9)和相加的次数b");
int a = sc.nextInt();//输入的数字
int b = sc.nextInt();//输入几个数相加
int s = 0;//相加的和
int d = 0;
for(int i = 0; i < b; i++){
d = d + a;
s = d + s;
a = a * 10;
}
System.out.println("相加的总和:"+s);
}
}
9、一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如 6=1+2+3.编 程 找出 1000 以内的所有完数。
public class No9 {
public static void main(String[] args){
for (int i = 1; i < 1000; i++)
{
int sum = 0;
for (int j = 1; j < i; j++)
{
if(i % j == 0)
{
sum += j;
}
}
if(i == sum)
{
System.out.println("完数:" + i);
}
}
}
}
10、一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时,共经过多少米?第 10 次反弹多高?
public class No5 {
public static void main(String[] args){
double h = 100.0;
double s = 100.0;
for(int i = 0; i < 10; i++){
h = h /2;
s += 2 * h;
}
System.out.println(h);
System.out.println(s);
}
}