网易雷火游戏开发笔试 4小时6道编程
1 矩形排序(100%)
定义类,再定义一个排序函数,然后直接用库函数sort
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
struct jx {
int w;
int h;
double b; //= min(w*1.0 / h, h*1.0 / w);
};
bool comp(jx j1, jx j2)
{
int s1 = j1.w * j1.h;
int s2 = j2.w * j2.h;
if ( s1!=s2)return(s1<s2);
if (j1.b!=j2.b)return (j1.b>j2.b);
return j1.w < j2.w;
}
int main()
{
int N;
cin >> N;
jx *data = new jx[N];
for (int i = 0; i < N; i++)
{
int w, h;
cin >> w >> h;
data[i].w=w;
data[i].h=h;
data[i].b= min(w*1.0 / h, h*1.0 / w);
}
sort(data, data + N, comp);
for (int i = 0; i < N; i++)
{
cout << data[i].w << " " << data[i].h;
if(i!=N-1) cout<< " ";
else cout << endl;
}
}
2 三角 有思路但是没写完。。。
4 最简分数。
求欧拉函数,打表。内存超限了,68.75%,如果直接算会超时,大概有40%-50%
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
//68.75
int p[100000000];
void ptable(int n)
{
for (int i = 2; i <= n; i++)
p[i] = 0;
p[1] = 1;
for (int i = 2; i <= n; i++)
if (p[i]==0)
for (int j = i; j <= n; j += i)
{
if (p[j] == 0)p[j] = j;
p[j] = p[j] / i * (i - 1);
}
}
//int findphi(int N)
//{
// int n=N;
// int k = (int)sqrt(double(n) + 0.5);
// int m = n;
// for (int i = 2; i <=k; i++)
// {
// if(n%i==0)
// {
// m = m / i * (i - 1);
// while (n%i == 0)
// n /= i;
// }
// }
// if (n > 1)m = m / n * (n - 1);
// return m;
//}
int main()
{
int n;
cin >> n;
ptable(n);
double fmin = 1;
for (int i = 1; i <= n; i++)
{
//cout << p[i] * 1.0 / i << " ";
double t = p[i]*1.0 / i;
//cout << t << endl;
if (fmin > t)
fmin = t;
}
printf("%0.6f\n", fmin);
}
5 砌墙找了边界条件。高度为1的时候f(n)=f(n-2)+f(n-3),17.24%
#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
//17.24
int onelevel[31];
void oneLevel()
{
//if (onelevel[n] != 0)return onelevel[n];
onelevel[0] = 0;
onelevel[1] = 0;
onelevel[2] = 1;
onelevel[3] = 1;
for (int i = 4; i <= 30; i++)
onelevel[i] = onelevel[i - 2] + onelevel[i - 3];
}
long long find(int w, int h)
{
//if (w <= 3) return 1;
if (h == 1)return onelevel[w];
}
int main()
{
int w, h;
cin >> w >> h;
oneLevel();
cout << find(w, h) << endl;
}