实验一 算法设计基础
一.实验目的
理解蛮力法的思想及程序的执行过程;
理解递推算法的思想;
能较熟练地编写枚举、递推程序,对给定的问题能设计出相应算法予以解决。
二.实验基本步骤
1. 选定实验题目,仔细阅读实验要求,设计好输入输出,按照分治法的思想构思算法,选取合适的存储结构实现应用的操作。
2. 设计的结果应在Visual C++ 实验环境下实现并进行调试。(也可使用JAVA编程)
3. 实验要有详细的测试记录,包括各种可能的测试数据。
三. 实验内容
1. 编程求和:s=a+aa+aaa+aaaa+ „„+aaaa„aaa(n个),其中a为1~9中的一个数字。 提示:若第一项为a , 以后每一项由前一项乘以10加上a递推得到,然后求和。
#include<stdio.h>
#include<math.h>
void main()
{
int a,i;
long s=0,x=0;
int n;
printf("输入1~9其中一个数字\n");
scanf("%d",&a);
printf("输入n\n");
scanf("%d",&n);
for(i=0;i<n;i++){
x+=a*pow(10,i);
s+=x;
printf("%d",x);
if(i!=(n-1))
printf("+");
}
printf("=%ld\n",s);
}
2. 编写程序求500 以内的勾股弦数,即满足 c2=b2+a2的3个数,要求b>a。将所有符合要求的组合存入文本文件中,每个组合占一行。
#include<stdio.h>
#define N 500
#include<math.h>
int main()
{
int a,b,c;
FILE *fpt;
fpt = fopen("D:\\gougushu.txt","w");
for(a=3;a<=N;a++)
for(b=4;b<=N;b++)
for(c=5;c<=N;c++)
if(a+b>c)
if(c*c==b*b+a*a)
{
fprintf(fpt,"%d %d %d\n",a,b,c);
}
fclose(fpt);
}
}
3. 在教材3.4节中两个问题(最近对问题、凸包问题)中任意选择一个问题,编程实现用蛮力法求解。 具体算法参考教材40-42页。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define N 10
void haha(int P[][2],int n)
{
int i,j;
srand((unsigned)time(0));
for(i=0;i<n;i++){
for(j=0;j<2;j++)
P[i][j]=rand()%20;
}
}
double ClosestPoints(int P[][2],int n)
{
double min=12345678910;
double dis=0;
int i,j;
int x,y;
for(i=0;i<=n-2;i++){
for(j=i+1;j<n-1;j++){
dis=pow((P[j][0]-P[i][0]),2)+pow((P[j][1]-P[i][1]),2);
if(dis<min){
min=dis;
x=j;
y=i;
}
}
}
printf("这两个坐标是X1:%d Y1:%d X2:%d Y2:%d\n",P[x][0],P[x][1],P[y][0],P[y][1]);
return sqrt(min);
}
void main()
{
int A[N][2];
int i,j;
printf("使用随机函数获得以下点 X Y:\n");
haha(A,N);
for(i=0;i<N;i++){
for(j=0;j<2;j++){
printf("%d ",A[i][j]);
}
printf("\n");
}
printf("两点最短距离是:%lf\n",ClosestPoints(A,N));
}
4. 编程实现教材3.2小节排序问题中的两个排序算法(选择排序,冒泡排序),要求用函数实现排序算法,主函数中调用。待排序数据用随机数产生(这个过程建议也用一个函数实现。)
#include<stdio.h>
#include<stdlib.h>
#define N 10
#include<time.h>
void haha(int a[],int n)
{
int i;
srand((unsigned)time(0));
for(i=0;i<n;i++){
a[i]=rand()%20;
}
}
void SelectionSort(int a[],int n)
{
int i,min,j,t;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++){
if(a[j]<a[min])
min=j;
}
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
void main()
{
int a[N];
int i;
haha(a,N);
printf("排序前\n");
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
printf("\n");
printf("排序后\n");
SelectionSort(a,N);
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
printf("\n");
}
#include<stdio.h>
#include<stdlib.h>
#define N 10
#include<time.h>
void haha(int a[],int n)
{
int i;
srand((unsigned)time(0));
for(i=0;i<n;i++){
a[i]=rand()%20;
}
}
void BubbleSort(int a[],int n)
{
int i,j,t;
for(i=0;i<=n-1;i++){
for(j=0;j<=n;j++){
if(a[j+1]<a[j]){
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
}
void main()
{
int a[N];
int i;
haha(a,N);
printf("排序前\n");
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
printf("\n");
printf("排序后\n");
BubbleSort(a,N);
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
printf("\n");
}