算法分析的实验一的题目
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]+" ");
}
}
}