网易雷火游戏开发笔试 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; }