2009年北航机试真题
1、迭代立方根
立方根的逼近迭代方程是y(n+1)=y(n)2/3+x/(3y(n)*y(n)),其中y0=x,求给定的x经过n次迭代后的立方根的值。
自做代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
double x;
cin>>x>>n;
double y=x;
for(int i=1;i<=n;i++)
{
y=y*2.0/3.0+x/(3.0*y*y);
}
printf("%.6lf",y);
return 0;
}
2、数组排序
大概意思是给你一个数组,要求非降序排序后,输出原序列中的各数排序的位置。
样例输入:
4
-3 75 12 -3
样例输出:
1 3 2 1
解释:第一个数-3和第四个数-3都是最小的,排序第一。75最大排序第3。
自做代码:
#include<iostream>
using namespace std;
#include<algorithm>
struct node
{
int num;
int iid;
int order;
}nums[100];
bool cmp(node a,node b)
{
return a.num<b.num;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>nums[i].num;
nums[i].iid=i;
}
sort(nums,nums+n,cmp);
for(int i=0;i<n;i++)
{
nums[i].order=i+1;
}
for(int i=0;i<n-1;i++)
{
if(nums[i].num==nums[i+1].num)
{
for(int j=i+1;j<n;j++) nums[j].order--;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(nums[j].iid==i) cout<<nums[j].order<<" ";
}
}
return 0;
}
3、字符串查找删除
输入一个字符串。删除in.txt文件中的该字符串并输出到out.txt文件中,要求空格统一放到行首输出。
自做代码:
#include<iostream>
using namespace std;
#include<queue>
#include<fstream>
#include<cstdio>
#include<cstring>
ofstream out("out.txt");
int *get_next(char *pattern)
{
int n=strlen(pattern);
int *next=new int[n];
int i=1,len=0;
next[0]=0;
while(i<n)
{
if(pattern[i]==pattern[len])
{
len++;
next[i]=len;
i++;
}
else
{
if(len>0) len=next[len-1];
else
{
next[i]=len;
i++;
}
}
}
for(int i=n-1;i>0;i--) next[i]=next[i-1];
next[0]=-1;
return next;
}
void kmp(char *test,char *pattern)
{
int n=strlen(test);
int m=strlen(pattern);
int i=0,j=0;
int *next=get_next(pattern);
int flag=0;
while(i<n)
{
if(j==m-1 && test[i]==pattern[j])
{
for(int k=flag;k<i-m+1;k++)
{
if(test[k]!=' ')
out<<test[k];
}
flag=i+1;
j=0;i++;
if(i>=n) break;
}
if(test[i]==pattern[j]) {
i++;j++;}
else
{
j=next[j];
if(j==-1) i++,j++;
}
}
if(flag<n)
{
for(int k=flag;k<n;k++) out<<test[k];
}
}
int main()
{
char pattern[50];
char *test=new char[2000];
gets(pattern);
ifstream in("in.txt");
char ch;
int cnt=0,blank=0;
while(in.get(ch))
{
if(ch=='\n')
{
test[cnt]='\0';
for(int k=0;k<blank;k++) out<<" ";
cnt=0;blank=0;
kmp(test,pattern);
out<<"\n";
}
else
{
test[cnt++]=ch;
if(ch==' ') blank++;
}
}
if(cnt!=0)
{
test[cnt]='\0';
for(int k=0;k<blank;k++) out<<" ";
kmp(test,pattern);
out<<"\n";
}
return 0;
}
/*
测试:
输入串:ababa
in.txt
abab a abbabababbababacc
abab a a b babababbababacc
abab a a b babababbababacc
abab a a b babababbababacc
out.txt
ababaabbbbcc
ababaabbbbcc
ababaabbbbcc
ababaabbbbcc
*/

这篇博客包含了三个编程问题的解决方案:首先使用迭代方法计算立方根,接着是一个非降序排序数组并输出元素顺序的算法,最后展示了一个在文本文件中查找并删除特定字符串的程序。这些代码实例涵盖了数值计算、数组操作和文件处理等基本编程技巧。

被折叠的 条评论
为什么被折叠?



