实验一 算法设计基础

算法分析的实验一的题目

1.编程求和:s=a+aa+aaa+aaaa+ „„+aaaa„aaa(n个),其中a为1~9中的一个数字。 提示:若第一项为a , 以后每一项由前一项乘以10加上a递推得到,然后求和。

import java.util.*; 
public class S1_1 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.print("输入整数n和a:");
		int n=sc.nextInt();
		int a=sc.nextInt();
		int sum=a;
		int b=0;
		int c=a;
		for(int i=0;i<n-1;i++)
		{
			b=a*10+c;
			sum=sum+b;
			a=b;
		}
		System.out.println(sum);
	}
}

2.编写程序求500 以内的勾股弦数,即满足 c2=b2+a2的3个数,要求b>a。

public class S1_2 {
	public static void main(String[] args) {
		int a=0,b=0,c=0;	
		for(int i=1;i<=500;i++){
			a=i;
			if(a==500)
			{
				break;
			}
			for(int j=2;j<=500;j++) {
				b=j;
				for(int k=3;k<=500;k++) {
					c=k;
					 if(c*c==b*b+a*a&&b>a){
							System.out.println(a+"、"+b+"、"+c);
						}
				}
			}
		}
		
	}
}

3.在教材3.4节中两个问题(最近对问题、凸包问题)中任意选择一个问题,编程实现用蛮力法求解。 具体算法参考教材40-42页。

import java.util.*;
public class S1_3 {

	public static void main(String[] args) {
		S1_3 k=new S1_3();
		double mind=k.ClosestPoints();
		double min=Math.sqrt(mind);
		System.out.println("最近距离为:"+min);
	}
		double ClosestPoints() {
			int P[][]=new int[100][2];
			Scanner sc=new Scanner(System.in);
			System.out.print("输入有多少个点:");
			int n=sc.nextInt();
			System.out.println("输入每个点的坐标:");
			for(int i=0;i<n;i++) {
				P[i][0]=sc.nextInt();
				P[i][1]=sc.nextInt();
			}
			int ind1, ind2;
			double mind=Double.POSITIVE_INFINITY;//mind设置为正无穷大,作为比较值
			double dis=0;
			ind1=0;ind2=0;
			for(int i=0;i<=n-2;i++)
				for(int j=i+1;j<=n-1;j++) {
					dis=(P[j][0]-P[i][0])*(P[j][0]-P[i][0])+(P[j][1]-P[i][1])*(P[j][1]-P[i][1]);
					if(dis<mind) {
						mind=dis;
						ind1=i;  //记录俩个点的坐标
						ind2=j;
					}
				}
			System.out.print("俩个点分别为:"+"("+P[ind1][0]+","+P[ind1][1]+")");
			System.out.println(" "+"("+P[ind2][0]+","+P[ind2][1]+")" );
			return(mind);
		}
}

4. 编程实现教材3.2小节排序问题中的两个排序算法(选择排序,冒泡排序),要求用函数实现排序算法,主函数中调用。待排序数据用随机数产生(这个过程建议也用一个函数实现。)

import java.util.*;

public class S1_4 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		int A[]=new int[100];
		System.out.print("输入需要生成多少的随机数N:");
		int n=s.nextInt();
		for(int i=0;i<n;i++) {
			A[i]=(int)(Math.random()*100)+1;//生成0~100的随机数
		}
		System.out.println("生成的数组为:");
		for(int i=0;i<n;i++) {
			System.out.print(A[i]+" ");
		}
		System.out.println();
		S1_4 sc=new S1_4();
		System.out.println("选择排序方法:1.选择排序   2.冒泡排序");
		int p=s.nextInt();
		switch(p) {
		case 1: sc.SelectionSort(A,n); break;
		case 2: sc.BubbleSort(A, n);break;
		default:System.out.println("请重新输入");
		}
	}
	
	void SelectionSort(int A[],int n){
		int t=0;
		int min=0;
		for(int i=0;i<=n-2;i++) {
			min=i;
			for(int j=i+1;j<=n-1;j++) {
				if(A[j]<A[min]) {
					t=A[min];
					A[min]=A[j];
					A[j]=t;
				}
				}
		}
		System.out.println("选择排序后的数组为:");
		for(int i=0;i<n;i++) {
			System.out.print(A[i]+" ");
		}
	}
	
	void BubbleSort(int A[],int n) {
		int t=0;
		for(int i=0;i<=n-2;i++) 
			for(int j=0;j<=n-2-i;j++) { 
				if(A[j+1]<A[j]) {
					t=A[j];
					A[j]=A[j+1];
					A[j+1]=t;
				}
			}
		System.out.println();
		System.out.println("冒泡排序后的数组为:");
		for(int i=0;i<n;i++) {
			System.out.print(A[i]+" ");
	}
}
}

猜你喜欢

转载自blog.csdn.net/weixin_42059543/article/details/82858459