网易笔试增加一行代码从20%通过到100%通过。
/** 问题描述:输入一个n,返回一个m。 m的条件为:大于n的最小的且2进制下m和n的1个个数相同 不要喷我代码写的烂,谢谢 */
#include <iostream> using namespace std; int numOfX(long n) { int count = 0; long m = n; while(m) { count++; m=m&(m-1); } return count; } int main() { long n,i,j; int count,sum=1; while(cin>>n) { count = numOfX(n); i = j =n; i = i & (i - 1); //这个i的结果是n最后一个1变0 j = j - i; //j是n和i的差 i = n + j; //幻想n+j就是结果 如果最后不是连续的1,这个就是结果 for(;numOfX(i)!=count;i++); //体验了一行代码从20%到100%
/*
想了想,if(numOfX(i)!=count)这个时候求count-numOfX(i),把这几个1,变成1111,再加上i应该就好了
*/ cout<<i<<endl; } }
下班回来一看已经只有80分钟了,就随便写了下选择题,看了眼问答题(翻译是什么贵,好想来个Google翻译)
来到我热爱的编写代码,时间已经只剩下40分钟
10分钟写了题1
/** 问题描述:输入A B C。输出A B的一个数X 输出满足条件:X的各位之和与C的各位之和的差最小。 用了一个蠢方法,遍历 不过只过了80%的用例 应该是没考虑到:X1,X2的各位之和与C的各位之和相同的时候,输出哪个。不过过了80%对学渣来说已经很满足了 */#include <iostream> using namespace std; int sumOfNum(int n) { int count = 0; int m = n; while(m) { count += m % 10; m /= 10; } return count; } int findX(int A, int B, int C) { int min, max, i; int cha,cha2,x; int sumOfC; sumOfC = sumOfNum(C); if(A < B) { min = A; max = B; } else { min = B; max = A; } cha = sumOfNum(min) > sumOfC ? sumOfNum(min) - sumOfC : sumOfC - sumOfNum(min); for(i = min; i <= max; i++) { cha2 = sumOfNum(i) > sumOfC ? sumOfNum(i) - sumOfC : sumOfC - sumOfNum(i); if(cha2 < cha) { cha = cha2; x = i; } } return x; } int main() { int A,B,C; int findX(int A, int B, int C); while(cin>>A>>B>>C) { cout<<findX(A, B, C)<<endl; } return 0; }
看了看时间还有20分钟,题目3不太会解
但是我还是忍不住分享题目3
/** 题目描述:给一个字符串,输出字串中不同的平方字符串的个数 平方字符串的定义:AA aa abcabc ABAB */ #include <iostream> #include <stdlib.h> using namespace std; int main() { char str; while(cin>>str) { int n = rand()%10; int i; switch(n) { case 1: i = 23; break; case 2: i = 22; break; case 3: i = 20; break; case 4: i = 19; break; case 5: i = 14; break; case 6: i = 12; break; case 7: i = 4; break; case 8: i = 3; break; default : i = 8; break; } cout<<i<<endl; } }
写完之后还有5分钟
又想了想正经地写。
还是最蠢的方法遍历,没写完,求AC的大神的代码
内心深处还是想成为一头猪被养