/*
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21….
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查询兔子对数的月份");
int morth = sc.nextInt();
int n = RabbitNumber(morth);
}
public static int RabbitNumber(int morth){
if (morth<=2){
return 1;
}else {
return RabbitNumber(morth-1)+RabbitNumber(morth-2);
}
}
2、100~200素数
/*
判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,
再也没有整数能被它整除的数。也就是素数只有两个因子。
*/
public static void main(String[] args) {
int j=0;
int sum = 0;
for (int i = 100; i <= 200; i++) {
for ( j = 2; j < i; j++) {
if (i%j==0){
break;
}
}
if (j==i){
System.out.printf("%d ",i);
sum++;
}
}
System.out.println("\n总共有"+sum);
}
3、水仙花
/* 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身
如:153 = 1^3+5^3+3^3;
* */
public static void main(String[] args) {
int sum = 0;
for (int i = 100; i < 1000; i++) {
int ge = i%10;
int shi = i/10%10;
int bai = i/100;
if (Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3)==i){
System.out.printf("%d ",+i);
sum++;
}
}
System.out.println("\n总共有"+sum+"个");
}
4、正整数分解成质因数
/*将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
System.out.printf("%d=",number);
for (int i = 2; i <= number; i++) {
while (number%i==0 && number!=i){
System.out.printf("%d*",i);
number/=i;
}
if (number==i){
System.out.printf("%d",i);
number/=i;
}
}
}
/*输入两个正整数m和n,求其最大公约数和最小公倍数。 */
public static void main(String[] args) {
int divisor = 0;
int MoM = 0;//公约数,公倍数
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
if (m<n){
int x = m^n;
m = x^m;
n = x^n;
}
for (int i = 1; i < m; i++) {
if (m%i==0 && n%i==0){
MoM=i;
}
}
for (int i = m; i < 10000; i++) {
if (i%m==0 && i%n==0){
divisor = i;
break;
}
}
System.out.println("最大公约数为"+MoM+"\n最小公倍数为"+divisor);
}
7、字符统计
/*输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。 */
public static void main(String[] args) {
/*注意: nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。!!!
*/
Scanner sc = new Scanner(System.in);
String rs = sc.nextLine();//!!!!!
char[] a = rs.toCharArray();
int num = 0;int letter = 0;int space = 0;int other = 0;
for (int i = 0; i < a.length; i++) {
if (a[i]>=48 && a[i]<=57){
num++;
}else if (a[i]>=65 && a[i]<=90 || a[i]>=97 && a[i]<=122){
letter++;
}else if (a[i]==32){
space++;
}else {
other++;
}
}
System.out.printf("数字个数:%d\n字母个数%d\n空格个数%d\n其他字符%d\n",num,letter,space,other);
}
8、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字
/*求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222
(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246; */
public static void main(String[] args) {
//该题也可以用数组做出,定义int[] arr=new int[n];但是空间浪费太大
Scanner sc = new Scanner(System.in);
System.out.println("请输入a的值");
int a = sc.nextInt();int key=a;
System.out.println("请输入有几个数相加");
int n = sc.nextInt();
int s = a;
System.out.print(a);
for (int i = 0; i < n-1; i++) {
s+=function(a,key);
System.out.print("+"+function(a,key));
a=function(a,key);
}
System.out.print("="+s);
}
public static int function(int a ,int key){
return key+a*10;
}
9、完数
/*一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。 */
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 (sum==i){
System.out.print(i+" ");
}
}
}
10、球落地反弹
/*一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? */
public static void main(String[] args) {
int hight = 100;
int n = 10;
int sum = hight;
for (int i = 0; i < n; i++) {
sum+=hight;
hight/=2;
}
System.out.println("在落地了"+n+"次后,经过了"+sum+"米");
System.out.println("第"+n+"反弹了"+hight+"米");
}
11、1~4组成3位数
/* 有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?并把他们都输入。 */
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 4; k++) {
if (i==j || j==k || i==k ){
break;
}
System.out.printf("%d ",(i*100+j*10+k));
System.out.printf("%d ",(k*100+j*10+i));
}
}
}
}
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,求应发放奖金总数*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入利润");
int i = sc.nextInt();
double bonus = 0;
if (i<=10){
bonus=i*0.1;
}else if(i<=20){
bonus=10*0.1+(i-10)*0.75;
}else if (i<=40){
bonus=10*0.1+10*0.75+(i-20)*0.5;
}else if (i<=60){
bonus=10*0.1+10*0.75+20*0.5+(i-40)*0.03;
}else if (i<100){
bonus=10*0.1+10*0.75+20*0.5+20*0.03+(i-60)*0.015;
}else {
bonus=10*0.1+10*0.75+20*0.5+20*0.03+40*0.015+(i-100)*0.01;
}
System.out.println("您的为企业或得的利润为 "+i+"万元;应发的奖金总数为 "+bonus+"万元");
}
13、完全平方数
/*一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? */
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
if (number(i)){
System.out.println(i);
break;
}
}
}
public static boolean number(int num ){
if (num<0){
return false;
}
for (int i = 0; i < num/2.0; i++) {
if (i*i == num){
return true;
}
}
return false;
}
14、根据日期判断是这年的哪一天
/*输入某年某月某日,判断这一天是这一年的第几天? */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Calendar cal = Calendar.getInstance();
System.out.println("请输入年份");
int year = sc.nextInt();
cal.set(Calendar.YEAR,year);
System.out.println("请输入月份");
int morth = sc.nextInt();
//注意:因为这里读月份是从0开始,所以要减一
cal.set(Calendar.MONTH,(morth-1));
System.out.println("请输入是几号");
int day = sc.nextInt();
cal.set(Calendar.DAY_OF_MONTH,day);
System.out.println("今天是第"+cal.get(Calendar.DAY_OF_YEAR)+"天");
}
15、3个整数比较大小
/*输入三个整数x,y,z,请把这三个数由小到大输出 */
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();
if (x>y){
int a = x^y;
x = a^x;
y = a^y;
}
if (y>z){
int a = y^z;
y = a^y;
z = a^z;
}//冒泡排序,此时z是最大值
if (x>y){
int a = x^y;
x = a^x;
y = a^y;
}
System.out.printf("%d %d %d",x,y,z);
}
16、乘法表
//输出9*9口诀
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.printf("%d*%d=%-3d",j,i,i*j);
}
System.out.println();
}
}
17、猴子吃桃子
/*猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩
下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。*/
// 10-1 9-4 8-10 7-22 6-46 5-94 4-190 3-382 2-766 1-1534
public static void main(String[] args) {
int num = 1;
for (int i = 1; i < 10; i++) {
num+=1;
num*=2;
}
System.out.println("第一天一共摘了 "+num+"个桃");
}
/*题目:打印出如下图案(菱形)
*
***
******
********
******
***
* */
public static void main(String[] args) {
int N=3;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N-i+1; j++) {//因为要配合下面四行,所以多大一个空格
System.out.print(" ");
}
for (int j = 1; j <= 2*i-1; j++) {
System.out.print("*");
}
System.out.println();
}
int n = 4;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i-1; j++) {
System.out.print(" ");
}
for (int j = 1; j <= (2*n+1)-2*i; j++) {
System.out.print("*");
}
System.out.println();
}
}
20、分数相加(后面运行数度很慢,数值很大)
/*有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
下一项的分子等于上一项的分子和分母之和;下一项的分母等于上一项的分子 */
public static void main(String[] args) {
int n = 20;
int sum = 0;
for (int i = 0; i < n; i++) {
double a = 2.0;
double b = 1.0;
sum += a/b;
a += b;
b = a;
}
System.out.println(sum);
}
21、阶乘求和
/*求1+2!+3!+...+20!的和 */
public static void main(String[] args) {
int sum =0 ;
for (int i = 1; i <= 20; i++) {
sum+=fun(i);
}
System.out.println(sum);
}
public static int fun(int a){
int x = 1;
while (a>1){
x*=a;
a--;
}
return x;
}
22、递归求阶乘
//利用递归方法求5!
public static void main(String[] args) {
System.out.println(function(5));
}
public static int function(int x){
if (x<=1) {
return 1;
}
return x*function(x-1);
}
23、5个人的年龄
/*有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问
第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
人多大? */
public static void main(String[] args) {
int old = 10;
for (int i = 1; i < 5; i++) {
old+=2;
}
System.out.println(old);
}
24、随机生成一个8位数以内的多位数,输出是几位数,并倒序输出每一位数上的数字
//给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个不多于5位的正整数");
int Number = 0;
int digits = 0;
int number = 0;
//判断数字是否符合条件
while (true){
number = sc.nextInt();
Number = number;
digits = 0;
while (number!=0) {
number/=10;
digits++;
}
if (digits>=5){
System.out.println("输入错误,请重新输入不多于5位数的正整数");
}else {
break;
}
}
//倒着打印各位数字
for (int i = 0; i < digits; i++) {
System.out.printf("%d ",Number%10);
Number/=10;
}
System.out.println("\n它是"+digits+"位数");
}
25、随机生成一个多位数(1~5位数),判断是否是回文数
/*一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个五位数");
int number = sc.nextInt();
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = number%10;
number/=10;
}
if (arr[0]==arr[4] && arr[1]==arr[3]){
System.out.println("是回文数");
}else {
System.out.println("不是回文数");
}
}
26、根据首字母或者前两个字母判断是周几
/*请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期几");
String rs = null;
char week;
while (true) {
rs = sc.next();
week = rs.charAt(0);
if (week=='M'||week=='m'){
System.out.println("星期一");
break;
}
if (week=='T'||week=='t'){
if (rs.charAt(1)=='u'){
System.out.println("星期二");
break;
}else if (rs.charAt(1)=='h'){
System.out.println("星期四");
break;
}
}
if (week=='W'||week=='w'){
System.out.println("星期三");
break;
}
if (week=='S'||week=='s'){
if (rs.charAt(1)=='a'){
System.out.println("星期六");
break;
}else if (rs.charAt(1)=='u'){
System.out.println("星期日");
break;
}
}
if (week=='f'||week=='F'){
System.out.println("星期五");
break;
}
System.out.println("输入错误,请重新输入");
}
}
27、100以内的素数
/*求100之内的素数
一个数除了一和本身可以整除,其他的都不能整除,这个数就是素数 */
public static void main(String[] args) {
int sum = 0;
int j ;
for (int i = 1; i <= 100; i++) {
for (j = 2; j <= Math.sqrt(i) ; j++) {//节省运算次数,提高算法的高效性
if (i%j==0){
break;
}//如果都不能整除,那么j在结束后会大于Math.sqrt(i)
}
if (j>Math.sqrt(i)){
System.out.print(i+" ");
sum++;
}
}
/*for (int i = 1; i <= 100; i++) {
for (j = 2; j < i ; j++) {//更容易理解
if (i%j==0){
break;
}//如果都不能整除,那么j在结束后会等于i
}
if (i==j){
System.out.print(i+" ");
sum++;
}
}*/
System.out.println("\n总数为"+sum);
}
28、10个整数进行排序
/*对10个数进行排序 ---冒泡排序 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入10个数");
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
//冒泡排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j]>arr[j+1]){
int x = arr[j];
arr[j]=arr[j+1];
arr[j+1]=x;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
29、求矩阵对角线之和
/*求一个3*3矩阵对角线元素之和
题意就是设置一个3*3的元素,然后求出其对角线的元素的和 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr = new int[3][3];
System.out.println("输入9个数");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
arr[i][j] = sc.nextInt();
}
}
System.out.print("第一条对角线的元素和"+(arr[0][0]+arr[1][1]+arr[2][2]));
System.out.print("第二条对角线的元素和"+(arr[0][2]+arr[1][1]+arr[2][0]));
}
30、插入一个数后按照原数组的顺序进行排序
/*有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
审题:按照原来的规律将它插入数组,而不是插入数组再按照原来的规律排序
先判断number是否插入在数组的首位位置,如果不是那就是插入在中间 arr[i]-number-arr[i+1] */
public static void main(String[] args) {
int[] arr = {8,21,26,53,73};
int[] arr1 = new int[arr.length+1];
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数");
int number = sc.nextInt();
if (arr[0]>arr[1]){//降序
if (number>=arr[0]){
arr1[0]=number;
for (int i = 1; i < arr1.length; i++) {
arr1[i]=arr[i-1];
}
}else if (number<= arr[arr.length-1]){
arr1[arr1.length-1]=number;
for (int i = 0; i < arr1.length - 1; i++) {
arr1[i]=arr[i];
}
}else {
arr1=function(arr,number);
}
}else {//升序
if (number<=arr[0]){
arr1[0]=number;
for (int i = 1; i < arr1.length; i++) {
arr1[i]=arr[i-1];
}
}else if (number >= arr[arr.length-1]){
arr1[arr1.length-1]=number;
for (int i = 0; i < arr1.length - 1; i++) {
arr1[i]=arr[i];
}
}else {
arr1=function(arr,number);
}
}
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i]+" ");
}
}
public static int[] function(int[] arr ,int number){
int[] arr1 = new int[arr.length+1];
int i;
for (i = 0; i < arr.length-1; i++) {
if (number<=arr[i]&&number>=arr[i+1]){
break;
}
if (number>=arr[i]&&number<=arr[i+1]){
break;
}
}
for (int j = 0; j < arr1.length; j++) {
arr1[j]=arr[j];
if (j==i){
break;
}
}
arr1[i+1]=number;
for (int j = i+1; j < arr1.length-1; j++) {
arr1[j+1]=arr[j];
}
return arr1;
}
31、数组排序
/*将一个数组逆序输出。 */
public static void main(String[] args) {
int[] arr = {21,412,512,74,231,52,1};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[arr.length - i - 1]+" ");
}
System.out.println();
for (int i = arr.length-1 ; i >= 0; i--) {
System.out.print(arr[i]+" ");
}//也是一样的
}
32、取一个多位数(7位到9位)其中的任意位上的数值
/*取一个整数a从右端开始的4~7位。 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个不少于7位数的整数");
long a ;
while (true){
a = sc.nextLong();
if (a<1000000){
System.out.println("输入错误,请重新输入");
}else
break;
}
System.out.println("第4位数 "+a/1000%10);
System.out.println("第7位数 "+a/1000000%10);
}
//输入3个数a,b,c,按大小顺序输出。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
if (a>b && a>c){
System.out.printf("%d ",a);
if (b>c){
System.out.printf("%d %d",b,c);
}else {
System.out.printf("%d %d",c,b);
}
}else if (b>a && b>c){
System.out.printf("%d ",b);
if (a>c){
System.out.printf("%d %d",a,c);
}else {
System.out.printf("%d %d",c,a);
}
}else {
System.out.printf("%d ",c);
if (a>b){
System.out.printf("%d %d",a,b);
}else {
System.out.printf("%d %d",b,a);
}
}
}
35、找到一个数组的最大值和最小值并分别交换到首尾位置
/*输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
分析:找出最大元素与最小元素索引,再进行交换 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入数组的长度");
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
System.out.print("输入第"+(i+1)+"个元素\n");
arr[i]=sc.nextInt();
}
int max = funtion(arr,'M');//获取最大的数的索引
int min = funtion(arr,'m');//获取最小的数的索引
int tem = arr[0];
arr[0]=arr[max];
arr[max]=tem;
tem = arr[arr.length-1];
arr[arr.length-1]=arr[min];
arr[min]=tem;
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
public static int funtion(int[] arr,char index){
int x = 0;
if (index=='M') {//找最大值的索引
for (int i = 0; i < arr.length - 1; i++) {
if (arr[x] > arr[i + 1]) {
x = x;
} else {
x = i+1;
}
}
}else if (index=='m') {
for (int i = 0; i < arr.length - 1; i++) {
if (arr[x] < arr[i + 1]) {
x = x;
} else {
x = i+1;
}
}
}else {
System.out.println("输入参数错误");
}
return x;
}
36、有n个整数,将最后m个数移到最前面,其余数依次后移m个位置
/*有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
题意理解:后面的m个数变成前面的,前面的n-m个数移到后面去
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入n的值");
int n = sc.nextInt();
int[] arr = new int[n];
System.out.println("请输入"+n+"个数字");
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
System.out.println("请输入m的值");
int m = sc.nextInt();
//把后面m个数储存起来
int[] arr1 = new int[m];
for (int i = 0; i < arr1.length; i++) {
arr1[i]=arr[i+n-m];
}
//把前面的数移动m个位置到后面去
for (int i = 0; i < n - m; i++) {
arr[n-i-1]=arr[n-m-1-i];
}
//把原来后面m个数变到前面去
for (int i = 0; i < arr1.length; i++) {
arr[i]=arr1[i];
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
37、报数游戏
/*有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
凡报到3的人退出圈子,问最后留下的是原来第几号的那位
说实话,这题看完没有什么思路,看到别人都用boolean数组这个关键点才知道写
利用boolean来解决退出圈子的问题 perfect */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入有几个人围成一圈");
int n =sc.nextInt();
boolean[] IsNum = new boolean[n];
for (int i = 0; i < IsNum.length; i++) {
IsNum[i]=true;
}
int gs = 0;
while (n>1){
for (int i = 0; i < IsNum.length; i++) {
if (IsNum[i]){
gs++;
}
if (gs==3){
IsNum[i]=false;
n--;
gs=0;
}
}
}
for (int i = 0; i < IsNum.length; i++) {
if (IsNum[i]){
System.out.println("最后留下的是第 "+(i+1)+"号位");
}
}
}
38、统计不同类型的字符
/*写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。(应该是考方法调用吧) */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(Length(str));
}
public static int Length(String str){
return str.length();
}
/*字符串排序。 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
String rs = sc.next();
System.out.println("请输入升序:1 or 降序:0");
int flag = sc.nextInt();
char[] arr = new char[rs.length()];
System.out.println(Short(rs ,flag));
}
public static String Short(String rs ,int flag ){
//定义一个char数组,并且来接收字符串,来排序
char[] arr = new char[rs.length()];
for (int i = 0; i < rs.length(); i++) {
arr[i] = rs.charAt(i);
}
if (flag==1) {//升序,把接收的字符数组排序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j]>arr[j+1]){
char tem = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tem;
}
}
}
}else if(flag==0){//降序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j]<arr[j+1]){
char tem = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tem;
}
}
}
}//定义StringBuild对象,来拼接成字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
return sb.toString();
}
41、5只猴子分桃子
/*海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,
这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,
它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? */
public static void main(String[] args) {
for (int i = 0;; i++) {
if (i%5==1)
if (Number(5,i)){
System.out.println("原来最少有 "+i+"个桃子");
break;
}
}
}
public static boolean Number(int monkey ,int number){
if (number%5==1){
number-=1;
number-=number/5;
monkey--;
}else {
return false;
}
if (monkey==0){
return true;
}
return Number(monkey,number);
}
42、求809*??=800*??+9*??+1中的??
/*809*??=800*??+9*??+1
其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。 */
// i*8<100 i>100/9.0
public static void main(String[] args) {
boolean flag = true;
for (double i = (100/9.0); i < 100/8.0; i++) {
if (809*i==800*i+9*i+1){
System.out.println(i+"\n"+"809*"+i+" = "+i*809);
flag = flag;
break;
}
}
if (flag){
System.out.println("没有这个数");
}
}
43、数组求解0~7的奇数个数
/*求0—7所能组成的奇数个数。 计算出能组成的总数除以2就可以了 */
public static void main(String[] args) {
int sum = 0;
int n = 8;//0~7;八个数
for (int i = 0; i < n; i++) {
sum+=JustNumber(n,i);//i位能组成的个数的奇数
}
}
public static int JustNumber(int a, int i){
if (i==0){
return a/2;
}
int sum = a-1;
while (i>0){
sum*=a;
i--;
}
return sum/2;
}
44、证明:一个偶数等于两个素数之和。
/*一个偶数总能表示为两个素数之和。 */
public static void main(String[] args) {
int num = 0;int x =0;
for(num=2;num<100;num+=2) {
x++;
int N = num/2 + 1;
int n = num/2 - 1;
if (JustMuth(num / 2)) {
System.out.printf("%d = %d+%-4d", num, num / 2, num / 2);
continue;
}
while (n > 0) {
if (JustMuth(n)&&JustMuth(N)){
System.out.printf("%d = %d+%-4d",num,n,N);
break;
}
n--;N++;
}
if (x==10){
System.out.println();
x=0;
}
}
}
public static boolean JustMuth(int n){
for (int i = 2; i < n; i++) {
if (n%i==0)
return false;
if (i==n-1)
return true;
}
return true;
}
45、判断一个素数能被几个9整除
/*判断一个素数能被几个9整除 */
public static void main(String[] args) {
for (int i = 10; i < 100; i++) {
if (JustNum(i)){
System.out.println(i+"能被 "+function(i)+"个9整除");
}
}
System.out.println("出这道题的脑子是瓦特了?能被整除叫素数?");
}
public static boolean JustNum(int n){
for (int i = 2; i < n; i++) {
if (n%i==0)
return false;
if (i==n-1)
return true;
}
return false;
}
public static int function(int n){
int sum = 0;
if (n%9==0 && n!=0){
sum++;
n/=9;
return function(n);
}
return sum;
}
/*读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。 */
public static void main(String[] args) {
Random r = new Random();
for (int i = 0; i < 7; i++) {
int a = r.nextInt(50) + 1;
System.out.print(a+" ");
for (int j = 0; j < a; j++) {
System.out.printf("*");
}
System.out.println();
}
}
48、4位数的加密问题
/*某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字
都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入4位数的整数");
int num = 0;
while (true){
num = sc.nextInt();
if (num/1000>0 && num/1000<10){
break;
}
}
//加密
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
int qian = num/1000%10;
ge = (ge+5)%10;
shi = (shi+5)%10;
bai = (bai+5)%10;
qian = (qian+5)%10;
ge = qian;
shi = bai;
System.out.println(ge+shi*10+bai*100+qian*1000);
}
49、统计字符串子串在父串中出现的次数
/*计算字符串中子串出现的次数 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
String rs = sc.next();
int sum = 0;
for (int i = 0; i < rs.length(); i++) {
for (int j = i+1; j < rs.length()+1; j++) {
System.out.print(rs.substring(i,j)+" ");
sum++;
}
System.out.println();
}
System.out.println(rs+"子串出现的次数"+sum);
}