package zll.material.java_base_homework;
import java.util.Arrays;
import java.util.Scanner;
import org.junit.Test;
public class D03 {
/**
* 1.有三个正整数,找出最大值
*/
@Test
public void test01(){
int[] is = new int[3];
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
for (int i=0;i<is.length; i++) {
is[i]= scan.nextInt();
}
System.out.println(Arrays.toString(is));
int[] mergeSort = mergeSort(is);
System.out.println("最大值为:"+mergeSort[mergeSort.length-1]);
}
/**
* 2. 当货物重量小于20 公斤的时候,收费5 元,大于20 公斤小于100 公斤的时 候超出20 公斤的部分按每0.2 元每公斤计费,
* 如果超出100 公斤的时候,超出的部分按照每公斤0.15 元计算。 读入货物的重量,输出计算之后货物的运费
*/
@Test
public void test02(){
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
System.out.println("输入公斤数:");
int nextInt = scan.nextInt();
if(nextInt<=20){
System.out.println("5");
}else if (nextInt<=100) {
double a = 5+0.2*(nextInt-20);
System.out.println(a);
}else {
double b = 5+0.2*80+(nextInt-100)*0.15;
System.out.println(b);
}
}
/**
* 3. 三个数字,按由大到小的顺序输出
*/
@Test
public void test03(){
int[] ints = {3,6,9,5,8,4,1,7,0};
fastSort(ints);
System.out.println(Arrays.toString(ints));
}
/**
* 4. 计算1+3+5+...+99的和
*/
@Test
public void test04(){
int a = 0;
for(int i=1;i<=99;i+=2){
a = a+i;
}
System.out.println(a);
}
/**
* 5. 计算一个小于10的正整数的阶乘
*/
@Test
public void test05(){
System.out.println(jiecheng(8));
}
private int jiecheng(int n){
if(n<=0){
return 0;
}else if (n==1) {
return 1;
}else {
return n*jiecheng(n-1);
}
}
/**
* 6. 搬砖问题:36 块砖,36 人搬,男搬4,女搬3,两个小孩抬1 砖, 要求一次全搬完,问男、女和小孩各若干?
*/
@Test
public void test06(){
for(int i=0;i<9;i++){
for(int j=0;j<13;j++){
for(int z=0;z<72;z+=2){
if(4*i+3*j+z/2==36&&i+j+z==36){
System.out.println("男:"+i+",女:"+j+",小孩:"+z);
}
}
}
}
}
/**
* 7. 读入一个整数n,输出如下图形
* n = 3
* *
* ***
* *****
* n = 4
* *
* ***
* *****
* *******
*
*/
@Test
public void test07(){
int n = 3;
for(int i=0;i<n-1;i++){
for(int x=i+1;x<n;x++){
System.out.println(" ");
}
for(int y=0;y<(i+1)*2;y++){
System.out.println("*");
}
System.out.println();
}
for(int i=0;i<n;i++){
for(int x=0;x<i;x++){
System.out.println(" ");
}
for(int y=i;y<n*2-(i+1);y++){
System.out.println("*");
}
System.out.println();
}
}
/**
* 8.输出一个九九乘法表
*/
@Test
public void test08(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+" ");
}
System.out.println();
}
}
/**
* 9. 中 国 古 代 数 学 家 研 究 出 了 计 算 圆 周 率 最 简 单 的 办 法:PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......这个算式的结果会无 限接近于圆周率的值,
* 我国古代数学家祖冲之计算出,圆周率在3.1415926 和 3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运算?
*/
@Test
public void test09(){
double PIH = 3.1415927; //定义上限
double PIL = 3.1415926; //定义下限
double sum = 0; //求的总和
int i = 0; //减法的次数
int y = 1;
while(sum>PIH||sum<PIL){
double z =0 ; //分母的数字
if(y%2==0){ //双数次加的数为负数
z=(-1)*(2*y-1);
}else{ //单数次加的数为正数
z=2*y-1; //分母
}
sum =sum+(4/z); //计算总和
if(z<0){ //z小于0的话,就是做了一次减法,所以i+1
i++;
}
y++;
}
System.out.println(i);
}
//快速排序-start
private void fastSort(int[] ints){
fastSort(ints,0,ints.length-1);
}
private void fastSort(int[] ints, int left, int right) {
int start = left;
int end = right;
int key = ints[left];
while(end>start){
while(end>start&&ints[end]>key)
end--;
if(ints[end]<key){
int tmp =ints[end];
ints[end] =key;
key =tmp;
}
while(end>start&&ints[start]<key)
start++;
if (ints[start]>key) {
int tmp =ints[start];
ints[start] =key;
key = tmp;
}
}
if(start>left)fastSort(ints,left,start-1);
if(right>end)fastSort(ints, end+1, right);
}
//快速排序-end
//归并排序-start
private int[] mergeSort(int[] ints){
int[] tmp = new int[ints.length];
mergeSort(ints,tmp,0,ints.length-1);
return tmp;
}
private void mergeSort(int[] ints, int[] tmp, int left, int right) {
int[] t = new int[right+1];
if(left==right){
tmp[left]=ints[left];
}else{
int mid = (left+right)/2;
mergeSort(ints, t, left, mid);
mergeSort(ints, t, mid+1, right);
merge(t,tmp,left,mid,right);
}
}
private void merge(int[] t, int[] tmp, int left, int mid, int right) {
int begin1 = left;
int end1 = mid;
int begin2 = mid+1;
int end2 = right;
int index = left;
while (begin1<=end1&&begin2<=end2) {
if(t[begin1]<t[begin2]){
tmp[index]=t[begin1];
begin1++;
}else {
tmp[begin2]=t[begin2];
begin2++;
}
index++;
}
while(begin1<=end1){
tmp[index]=t[begin1];
begin1++;
index++;
}
while(begin2<=end2){
tmp[index]=t[begin2];
begin2++;
index++;
}
}
//归并排序-end
}
第三篇
最新推荐文章于 2022-03-24 09:31:32 发布