1、打印出100以内的素数:
代码:
package com.loan.controller;
public class Arithmetic {
public static void main(String[] args){
getPrimes(100);//1
}
/**
* 1、打印出100以内的素数
*/
public static void getPrimes(int maxNum){
String s=maxNum+"以内的素数有:";
for(int i=2;i<=maxNum;i++){
if(isPrime(i)){
s+=i+",";
}
}
System.out.println(s.subSequence(0, s.length()-1));
}
/**
* 判断某个数是否为素数
* @param num
* @return
*/
public static boolean isPrime(int num){
for(int i=2;i<=Math.sqrt(num);i++){
if(num%i==0){
return false;
}
}
return true;
}
}
结果:
2、打印九九乘法表:
代码:
/**
* 打印九九乘法表
*/
public static void NineNineMuiltTable(){
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
结果:
3、打印10000以内的回文数字:
代码:
/**
* 打印10000以内的回文数字
*/
public static void circleNum(int maxNum){
String s=maxNum+"以内的回文数字有:\n";
int count=0;
for(int i=11;i<maxNum;i++){
if(isCircleNum(i)){
count++;
if(count%10==0){
s+=i+"\n";
}
else{
s+=i+",";
}
}
}
System.out.println(s);
}
public static boolean isCircleNum(int num){
int oldNum=num;
int reverseNum=0;
while(num>0){
reverseNum=reverseNum*10+num%10;
num=num/10;
}
if(oldNum==reverseNum){
return true;
}
return false;
}
结果:
/**
* 打印10000以内的回文数字
*/
public static void circleNum(int maxNum){
String s=maxNum+"以内的回文数字有:\n";
int count=0;
for(int i=11;i<maxNum;i++){
if(isCircleNum(i)){
count++;
if(count%10==0){
s+=i+"\n";
}
else{
s+=i+",";
}
}
}
System.out.println(s);
}
public static boolean isCircleNum(int num){
int oldNum=num;
int reverseNum=0;
while(num>0){
reverseNum=reverseNum*10+num%10;
num=num/10;
}
if(oldNum==reverseNum){
return true;
}
return false;
}
4、获取任意一个时间的下一天的时间:
代码:
public static void main(String[] args) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=sdf.parse("2018-8-25 14:25:58");
getNextDay(date,30);
}
/**
* 获取任意一个时间的下n天的时间
*/
public static void getNextDay(Date date,int n){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long times=date.getTime();
//一天时间的时间戳
long addTime=n;
addTime*=24;
addTime*=60;
addTime*=60;
addTime*=1000;
//增加一天后的时间戳
long nextTimes=times+addTime;
System.out.println(sdf.format(date)+"的下"+n+"天的日期是:"+sdf.format(new Date(nextTimes)));
}
结果:
5、冒泡排序:
代码:
注:数组copy用 :System.arraycopy(a, 0, b, 0, a.length);
public static void main(String[] args) throws ParseException{
int a[]={5,1,3,2,4,6,0,7,2,9,10,8};
maopaoSort(a);
}
/**
* 冒泡排序
* @param a
*/
public static void maopaoSort(int a[]){
int[] b=new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
for(int i=0;i<a.length;i++){
for(int j=i;j<a.length;j++){
int temp=0;
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
String s="原数组:";
for(int bb:b){
s+=bb+",";
}
s+="冒泡排序之后的结果:";
for(int aa:a){
s+=aa+",";
}
System.out.println(s);
}
结果:
6、插入排序:
代码:
public static void main(String[] args) throws ParseException{
int a[]={5,1,3,2,4,6,0,7,2,9,10,8};
insertSort(a);
}
/**
* 插入排序
* @param a
*/
public static void insertSort(int[] a){
int[] b=new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
for(int i=0;i<a.length;i++){
int temp=a[i];
for(int j=i;j>0;j--){
if(temp<a[j-1]){
a[j]=a[j-1];
a[j-1]=temp;
}
else{
break;
}
}
}
String s="原数组:";
for(int bb:b){
s+=bb+",";
}
s+="插入排序之后的结果:";
for(int aa:a){
s+=aa+",";
}
System.out.println(s);
}
结果:
7、快速排序:
代码:
public static void main(String[] args) throws ParseException{
int a[]={5,1,3,2,4,6,0,7,2,9,10,8};
System.out.println("原数组:");
print(a);
quickSort(a,0,11);
System.out.println();
System.out.println("快速排序后数组:");
print(a);
}
public static void print(int a[]){
for(int aa:a){
System.out.print(aa+",");
}
}
/**
* 快速排序
* @param a
* @param low
* @param high
*/
public static void quickSort(int a[],int low,int high){
if(low>=high){//low小于high直接返回
return;
}
else if(high-low==1){//只有两个数,直接排序
if(a[high]<a[low]){
swap(a,a[high],a[low]);
}
return;
}
else{
int pivot=a[low];//最小的设置为中间值
int left=low+1;//左滑块值从第二个值开始
int right=high;//又滑块从最后一个值开始
while(left<right){//左右循环
while(left<right){//向右循环,找出一个大于中间值的数,记录下标为left
if(a[left]>pivot){
break;
}
left++;
}
while(left<=right){//向左循环,找出小于中间值的数,记下下标right
if(a[right]<pivot){
break;
}
right--;
}
if(left<right){//将找到的left,right值进行交换
swap(a,left,right);
}
}
swap(a,low,right);//交换中间值,因为low已经作为过中间值了,此时low为左边数组中的最大值放到最后。
quickSort(a,low,right);//左边数组快速排序
quickSort(a,right+1,high);//右边数组快速排序
}
}
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
结果:
8、N个人围成圈,数到K和K的倍数时出圈,最后剩下的人原来的位置是?
代码:
public static void main(String[] args) throws ParseException{
cycle(50,3);
}
public static void cycle(int total,int k){
List<Integer> list=new LinkedList<Integer>();
for(int i=0;i<total;i++){
list.add(i+1);
}
int index=-1;
while(list.size()>1){
index=(index+k)%list.size();
list.remove(index--);//出圈后,出圈元素之后的数据都会前移,所以下标-1
}
System.out.println(total+"个人围成圈,数到"+k+"和"+k+"的倍数时出圈,最后剩下的人原来的位置是:"+list.get(0));
}
结果:
另外:
//求阶乘之和
private static int getJC(int m,int n){
int s=0;
for(int i=m;i<n+1;i++){
int temp=1;
for(int j=1;j<i;j++){
temp*=j;
}
s+=temp;
}
return s;
}
//判断是否为闰年
private static boolean checkIsRunYear(int year){
if((year%4==0&&year%100!=0)||(year%400==0)){
return true;
}
else{
return false;
}
}
//兔子问题 month 月数 type 一次生几对兔子
private static int num(int month,int type){
if(month==1||month==2){
return 1;
}
else{
// System.out.println(num(month-1,type)+num(month-2,type)*type);
return num(month-1,type)+num(month-2,type)*type;
}
}
//查找水仙花数
private static void findsxh(){
for(int i=100;i<1000;i++){
int h=i/100;
int s=(i%100)/10;
int g=(i%100)%10;
if((int)((int)Math.pow(h, 3)+(int)Math.pow(s, 3)+(int)Math.pow(g, 3))==i){
System.out.println(i+"是水仙花数");
}
}
}
//【程序4】Explode.java 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
private static void explode(int n){
String s=n+"=";
List list=new ArrayList();
if(isPrime(n)){
System.out.println("本身就是质数:"+n);
}
else{
for(int i=2;i<=n/2;i++){
if(isPrime(i)){
list.add(i);
}
}
int m=0;
for(int j=0;j<list.size();j++){
System.out.println("质数:"+list.get(j));
if(n%((int)list.get(j))==0){
s+=list.get(j)+"*";
m=n/((int)list.get(j));
while(m%((int)list.get(j))==0){
s+=list.get(j)+"*";
m/=((int)list.get(j));
}
}
}
if(s.endsWith("*")){
s=s.substring(0, s.length()-1);
}
System.out.println("分解后结果为"+s);
}
}
//利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示
private static void conditionOperator(int grade){
System.out.println(grade>=90?"A":(grade>=60?"B":"C"));
}
//题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
private static void maxMin(int a,int b){
int max=a>b?a:b;
int min=a<b?a:b;
for(int i=min;i>0;i--){
if((a%i==0)&&(b%i==0)){
System.out.println("最大公约数:"+i);
break;
}
}
for(int i=max;i<=a*b;i++){
if((i%a==0)&&(i%b==0)){
System.out.println("最小公倍数:"+i);
break;
}
}
}
//题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
private static void stChar(String s){
System.out.println("字符总数:"+s.length());
char[] ch=s.toCharArray();
int c=0;
int k=0;
int sz=0;
int o=0;
for(int i=0;i<ch.length;i++){
if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')){
c++;
}
else if(ch[i]==' '){
k++;
}
else if(ch[i]>='0'&&ch[i]<='9'){
sz++;
}
else{
o++;
}
}
System.out.println("英文字符数:"+c+"空格数:"+k+"数字数:"+sz+"其他字符:"+o);
}
//题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
private static void testAdd(int n,int a){
int s=0;
String sc="";
for(int i=1;i<=n;i++){
if(i!=1){
sc+="+";
}
int sum=0;
for(int k=i-1;k>=0;k--){
sum+=Math.pow(10, k);
sc+=a;
}
s+=a*sum;
}
System.out.println(s+"="+sc);
}
//题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
private static void wanshu(int n){
List a=new ArrayList();
for(int i=2;i<n+1;i++){
//求出所有质数
if(isPrime(i)){
a.add(i);
}
}
for(int j=2;j<n+1;j++){
int zszh=1;
int m=0;
String s=j+"=";
for(int k=0;k<a.size();k++){
int zs=(int)(a.get(k));
if(j%zs==0) {
zszh+=zs;
s+=zs+"+";
m=j/zs;
while(m%zs==0){
zszh+=zs;
s+=zs+"+";
m/=zs;
}
}
}
if(zszh==j){
System.out.println(j);
}
}
}
//题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
private static void pro10(int height,int n){
int s=0;
for(int i=0;i<9;i++){
s+=height*Math.pow(0.5, i);
}
System.out.println("它在第"+n+"次落地时,共经过多少米?"+s);
System.out.println("第10次反弹多高?"+height*Math.pow(0.5, 8));
}
//题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
private static void pro11(int amount){
double num=0;
if(amount<=10){
num=0.1*amount;
}
else if(amount>10&&amount<=20){
num=1+(amount-10)*0.075;
}
else if(amount>20&&amount<=40){
num=1.75+(amount-20)*0.05;
}
else if(amount>40&&amount<=60){
num=2.75+(amount-40)*0.03;
}
else if(amount>60&&amount<=100){
num=3.35+(amount-60)*0.015;
}
else{
num=3.95+(amount-100)*0.01;
}
System.out.println("当利润为"+amount+"时,发放奖金数为:"+num);
}
//输入某年某月某日,判断这一天是这一年的第几天?
private static void pro12(String s){
List list=new ArrayList();
String[] a=s.split("-");
int days=0;
for(int i=0;i<a.length;i++){
list.add(Integer.parseInt(a[i]));
}
int month=(int)list.get(1);
int day=(int)list.get(2);
int isRun=0;
if(checkIsRunYear((int)list.get(0))){
isRun=1;
}
switch (month) {
case 1:
days=day;
break;
case 2:
days=31+day;
break;
case 3:
days=59+day+isRun;
break;
case 4:
days=90+day+isRun;
break;
case 5:
days=120+day+isRun;
break;
case 6:
days=151+day+isRun;
break;
case 7:
days=181+day+isRun;
break;
case 8:
days=212+day+isRun;
break;
case 9:
days=243+day+isRun;
break;
case 10:
days=273+day+isRun;
break;
case 11:
days=304+day+isRun;
break;
case 12:
days=334+day+isRun;
break;
default:
break;
}
System.out.println("这是一年的第"+days+"天");
}
//输入三个整数x,y,z,请把这三个数由小到大输出。
private static void pro13(int a,int b,int c){
int temp;
if(a>b){
temp=a;a=b;b=temp;
if(b>c){
temp=b;b=c;c=temp;
}
}
System.out.println(a+"<"+b+"<"+c);
}