北航上机试题2009(题目+代码)

https://apriljia.com/2018/07/16/%E5%8C%97%E8%88%AA%E4%B8%8A%E6%9C%BA%E8%AF%95%E9%A2%982009%EF%BC%88%E9%A2%98%E7%9B%AE%E4%BB%A3%E7%A0%81%EF%BC%89/

1、立方根的逼近迭代方程是 y(n+1) = y(n)*2/3 + x/(3*y(n)*y(n)),其中y0=x.求给定的x经过n次迭代后立方根的值。

输入:
输入有多组数据。
每组一行,输入x n。

输出:
迭代n次后的立方根,double精度,保留小数点后面六位。

样例输入:
3000000 28
样例输出:

144.224957

#include "stdafx.h"
#include "math.h"
#include "stdio.h"

//using namespace std;


int main(int argc, char* argv[])
{
	double x,n;
	double result=0;
	scanf("%lf %lf",&x,&n);
	result=x;
	while(n>0){
		result=result*2/3+x/(3*result*result);
		n--;
	}
	printf("%lf",result);
	
	getchar();
	return 0;
}

2、数组排序

输入一个数组的值,求出各个值从小到大排序后的次序。

输入:输入的第一个数为数组的长度,后面的数为数组中的值,以空格分割

输出:各输入的值按从小到大排列的次序。

sample

input:

4

-3 75 12 -3

output:

1 3 2 1

#include "stdafx.h"
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
//using namespace std;


int main(int argc, char* argv[])
{
	int n,m,*a,*b;
	int i,j;
	scanf("%d",&n);

	a=(int*)malloc(sizeof(int)*n);
	b=(int*)malloc(sizeof(int)*n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
		b[i]=a[i];
	}
	int min;
	for(i=1;i<n;i++){
		min=i-1;
		for(j=i;j<n;j++){
			if(a[j]<a[min]) min=j;
		}
		int temp=a[i-1];
		a[i-1]=a[min];
		a[min]=temp;
	}
	m=n;

	for(i=0;i<m-1;i++)
	{
		if(a[i]==a[i+1]){
			for(j=i+1;j<m-1;j++)
				a[j]=a[j+1];
			m--;
			i--;
		}
	}
	for(i=0;i<m;i++)
		printf("%d ",a[i]);
	printf("\n");

	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			if(b[i]==a[j]){
				printf("%d ",j+1);
				break;
			}
		}
	}

	free(a);
	return 0;
}


猜你喜欢

转载自blog.csdn.net/mingzhiqing/article/details/81063174
今日推荐