最基本的字符串
获取字符串中的所有数字
//得到所有的数字
public static void main(String[] args) {
String str="123ads234fasdf123";
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
//注意chars[i]比较的是ASCII码值
if(chars[i]>=48 && chars[i]<=57){
System.out.print(chars[i]+",");
//控制台打印结果:1,2,3,2,3,4,1,2,3,
}
}
}
水仙花数
水仙花数:三个数的立方和等于这个数,例如:153=1的三次方+5的三次方+3的三次方
//打印100-999之间所有的水仙花数
public static void main(String[] args) {
for (int i = 100; i < 1000; i++) {
int ge=i%10;//个位数
int shi=i/10%10;//十位数
int bai=i/100%10;//百位数
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
System.out.println(i);//153-370-371-407
}
}
}
分解质因数
@Test
//对一个正整数进行分解质因数:输入90,打印出90=2*3*3*5
public void test1(){
String str="";
//显示一个输入框
str=javax.swing.JOptionPane.showInputDialog("请输入n的值(输入exit退出):");
int n=0;
try {
n= Integer.parseInt(str);
}catch (Exception e){
e.printStackTrace();
}
System.out.print(n+"分解质因数"+n+"=");
fenjie(n);
}
private void fenjie(int n) {
for (int i = 2; i < n/2; i++) {
if(n%i==0){
System.out.print(i+"*");
fenjie(n/i);
}
}
System.out.print(n);
System.exit(0);//结束程序
}
反弹
//100米每次反弹原高度的一半,求它在 第10次落地时,共经过多少米?第10次反弹多高
@Test
public void test02(){
double a=100;
double b=0;
for (int i = 0; i < 10; i++) {
a/=2;
System.out.println(a);
}
}
循环
//1,2,3,4可以组成多少个(个十百都不同)的3位数?
@Test
public void test03(){
int[] arr={1,2,3,4};
int count=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
for (int k = 0; k < arr.length; k++) {
if(arr[i]!=arr[j]&&arr[i]!=arr[k]&&arr[j]!=arr[k]){
System.out.println(arr[i]+""+arr[j]+""+arr[k]);
count++;
}
}
}
}
System.out.println("可以组成"+count+"个(个十百都不同)的3位数");
}
乘法口诀
@Test
public void test05(){
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+i*j+" ");
}
System.out.println();
}
}
吃桃子
//每天吃一半加1个桃子,第十天剩下1个桃子,总共有多少桃子
public void test06(){
int a=1;
for (int i = 1; i < 10; i++) {
a=(a+1)*2;
System.out.println(a);
}
System.out.println("共有"+a+"个桃子");//1534
}
回文数
//回文数12321个位数和万位数相同,十位数和千位数相同;打印5位数所有的回文数
@Test
public void huiwen(){
int count=0;
for (int i = 10000; i < 100000; i++) {
int ge =i%10;
int shi=i/10%10;
int qian=i/1000%10;
int wan=i/10000%10;
if(ge==wan&&shi==qian){
count++;
System.out.println("5位数中的回文数:"+i);
}
}
System.out.println("总共有"+count+"个");
}
约瑟夫环
//约瑟夫环(30人围成一个圈,从某一个人开始数,第9个人死亡,从下一个人开始数,第9个人死亡,死亡后人数减少,依次循环,最后剩下15个基督教人,这些基督教人的位置?)
@Test
public void test07(){
//定义30个活人
boolean[] person=new boolean[30];
for (int i = 0; i < person.length; i++) {
person[i]=true;
}
int counter=0;//死亡人数
int index=0;
int claimNumber=0;//当前是第几个人的
//条件:15个人死亡
while (counter<15){
if(person[index]){
claimNumber++;
if(claimNumber==9){
person[index]=false;
counter++;
claimNumber=0;
}
}
index++;
if(index>=person.length){
index=0;
}
}
for (boolean b : person) {
if(b){
System.out.println("基");
}else{
System.out.println("非");
}
}
System.out.println(Arrays.toString(person));
}
台阶
我是不懂
//一个有n级的台阶,一次可以走1级、2级或3级,问走完n级台阶有多少种走法
@Test
public void test08(){
//假设有5个台阶
System.out.println(countWay(5));//13种方式
}
private int countWay(int n) {
if(n<0){
return 0;
}else if(n==0){
return 1;
}else{
return countWay(n-1)+countWay(n-2)+countWay(n-3);
}
}
拼钱
@Test
//50块钱用1,2,5块,可以有多少种拼的方式
public void test09(){
int count =0;
for (int i = 0; i < 50/1; i++) {
for (int j = 0; j < 50/2; j++) {
for (int k = 0; k < 50/5; k++) {
if(i*1+j*2+k*5==50){
System.out.println(i+"个一块的"+j+"个2块的"+k+"个5块的");
count++;
}
}
}
}
System.out.println("总共有"+count+"种方法拼成50块");
}