java语言程序设计与数据结构7.3
package three;
import java.util.Scanner;
public class T7_11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.print("Enter the length of array: ");
int n=input.nextInt();
double[] array=new double[n];
System.out.print("Enter n double numbers: ");
for(int i=0;i<array.length;i++)
array[i]=input.nextDouble();
System.out.printf("The mean is %5.2f\n",mean(array));
System.out.printf("The deviation is %5.5f",deviation(array));
}
//计算标准差
public static double deviation(double[] x) {
double d=0;
double m=mean(x);
for(double e:x) {
d=d+Math.pow(e-m,2);
}
d=Math.sqrt(d/(x.length-1));
return d;
}
//计算平均值
public static double mean(double[] x) {
double m=0;
for(double e:x) {
m=m+e;
}
return m/x.length;
}
}
//10
//1.9 2.5 3.7 2 1 6 3 4 5 2
12.
package three;
import java.util.Scanner;
public class T7_12 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the length of array: ");
int n=input.nextInt();
int[] list=new int[n];
System.out.print("Enter n int numbers: ");
for(int i=0;i<list.length;i++)
list[i]=input.nextInt();
int[] result=new int[list.length];
result=reverse1(list);
System.out.print("use reverse1: ");
for(int i=0;i<list.length;i++)
System.out.print(result[i]+" ");
System.out.print("\nBefore uesing reverse: ");
for(int i=0;i<list.length;i++)
System.out.print(list[i]+" ");
reverse(list);
System.out.print("\nAfter using reverse: ");
for(int i=0;i<list.length;i++)
System.out.print(list[i]+" ");
}
public static void reverse(int[] list) {
for(int i=0;i<list.length/2;i++) {
int temp=list[i];
list[i]=list[list.length-i-1];
list[list.length-i-1]=temp;
}
}
//7.7节中的reverse方法
public static int[] reverse1(int[] list) {
int[] result=new int[list.length];
for(int i=0,j=result.length-1;i<list.length;i++,j--)
result[j]=list[i];
return result;
}
}
13.
???啥叫不能是传递到实参中的数???
”调用方法的时候是通过按值传递的方式将实参传给形参的。“
所以应该就是,返回的数不能等于numbers喽
那感觉是55欸
毕竟0~54要通过(int)(Math.random()*55)来实现
就先这样写吧
package three;
public class T7_13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int numbers=55;
System.out.println(getRandom(numbers));
}
public static int getRandom(int numbers) {
return (int)(Math.random()*numbers);
}
}
怎么求最大公约数来着?又忘了。。。
辗转相除法:
public static int gcd0(int x,int y) {
if(y==0)
return x;
else
return gcd0(y,x%y);
}
package three;
import java.util.*;
public class T7_14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.print("Enter the length of array n: ");
int n=input.nextInt();
int[] array=new int[n];
System.out.print("Enter n int numbers: ");
for(int i=0;i<array.length;i++)
array[i]=input.nextInt();
System.out.println("The gcd of numbers is "+gcd(array));
}
public static int gcd(int[] numbers) {
for(int i=0;i<numbers.length-1;i++) {
numbers[i+1]=gcd0(numbers[i],numbers[i+1]);
}
return numbers[numbers.length-1];
}
public static int gcd0(int x,int y) {
if(y==0)
return x;
else
return gcd0(y,x%y);
}
}
15.
package three;
import java.util.Scanner;
public class T7_15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.print("Enter the length of list n: ");
int n=input.nextInt();
int[] list=new int[n];
System.out.print("Enter n numbers: ");
for(int i=0;i<list.length;i++)
list[i]=input.nextInt();
int[] result=new int[list.length+1];
result=eliminateDuplicates(list);
System.out.print("The distinct numbers are: ");
for(int i=0;i<result[list.length];i++)
System.out.print(result[i]+" ");
}
public static int[] eliminateDuplicates(int[] list) {
int[] result=new int[list.length+1];
result[0]=list[0];
int n=0;
boolean m=false;
for(int i=1;i<list.length;i++) {
for(int j=0;j<=n;j++)
if(result[j]==list[i]) {
m=false;
break;
}
else m=true;
if(m) {
n++;
result[n]=list[i];
}
}
result[list.length]=n+1;//比传入的数组大一个,放剔除部分数据后的数据长度,可以作为输出是for循环的循环判断条件
return result;
}
}
//1 2 3 2 1 6 3 4 5 2
这道题有两点要注意
1、在遍历list的每一个数时,要保证它和result现有的所有数都不相同,再向result里写;
2、输出的时候,因为要知道result中有效的数字有多少,而且要只能传递一个数组出来,所以,要给result的最后一个位置放置一个表示其中有效数字个数的数。
这道题感觉红儿的思路写起来跟简单一点,也贴在这里:
她没有新建一个数组,而是将原来的数组中的数字改变,后出现的数字如果与前边的数字相同,就把它改了,改成一个与本数组中的数据绝不相同的数,然后输出的时候判断这个数是否被改,改了则不输出。
package three;
import java.util.Scanner;
public class T7_15ByHong {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int[] numbers=new int[11];
int sum=0;
for(int i=0;i<10;i++)
{
numbers[i]=scan.nextInt();
sum+=Math.abs(numbers[i]);
}
numbers[10]=sum;//放一个绝对不会和数组元素相同的数
numbers=eliminateDuplicates(numbers);
for(int i=0;i<10;i++)
{
if(numbers[i]!=sum)
System.out.print(numbers[i]+" ");
}
}
public static int[] eliminateDuplicates(int[] list){
for(int i=0;i<9;i++) {
if(list[i]==list[list.length-1]) continue;
for(int j=i+1;j<10;j++)
{
if(list[i]==list[j])
list[j]=list[10];
}
}
return list;
}
}