网易2017校招C++开发工程师笔试卷(0923)
一个数字的数位和定义为这个数字所有位置的数值的总和,例如:
1234的数位和为:1+2+3+4=10
5463的数位和为:5+4+6+3=16
现在有3个数A,B,C,需要你求出在A,B范围内(包括A,B)的一个数,让X的数位和与C的数位和差值的绝对值最小。
输入描述:
输入为一行,一行有三个数A, B, C,使用空格隔开。
(1<=A,B,C<=1000000000)
(0<=B-A<=100000)
输出描述:
输出一个数,即为所求得X,如果有多解输出最小的那个解
输入例子:
1 9 10
输出例子:
1
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
int getNumSum( int n )
{
int sum = 0;
while( n > 0 )
{
sum += n % 10;
n = n / 10;
}
return sum;
}
int main()
{
int ret = 0;
int A = 0;
int B = 0;
int C = 0;
while( cin >> A >> B >> C )
{
int low = A;
int high = B;
int cSum = getNumSum(C);
int result = -1;
int curDif = -1;
for( int i = A; i <= B; i++ )
{
int cur = getNumSum(i);
int dif = cur - cSum;
dif = dif < 0 ? -dif : dif;
if( -1 == result )
{
result = i;
curDif = dif;
}
else if( dif < curDif )
{
result = i;
curDif = dif;
}
if( 0 == curDif )
{
break;
}
}
cout << result << endl;
}
return ret;
}
如果一个字符串由完成相同的两段字符串组成,我们成为平方串,如:
aa,ABAB,abcabc是平方串
aaa,ABCabc,abcab不是平方串
现在给出一个字符串求它所有连续子串中有多少种平方串。
例如:
aaabccabccCC,我们发现aa,abccabcc,cc,CC这四种平方串,其中aa,cc出现了2次,但我们只统计一次计数
输入为一个字符串,长度length,0<=lengh<=50,只包含大小写字母
输出一个整数,即为所求的种类
输入例子:
aaabccabccCC
输出例子:
4
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
int ret = 0;
string s;
while( cin >> s )
{
int len = s.length();
int cnt = 0;
map<string,bool> mp;
for( int i = 0; i < len - 1; i++ )
{
for( int j = 2; ( i + j ) <= len; j += 2 )
{
string tmp = s.substr( i, j );
string s1 = tmp.substr( 0, j / 2 );
string s2 = tmp.substr( j / 2, j / 2 );
if( 0 == s1.compare(s2) )
{
if( mp.find(s1) == mp.end() )
{
mp[s1] = true;
cnt++;
}
}
}
}
cout << cnt << endl;
}
return ret;
}
一个数的二进制权重被定义为一个十进制数表示为二进制数中'1'的个数,如:
1的二进制权重就是1
1717表示二进制为11010110101,所以二进制权重为7
现在给出一个正整数,返回最小的一个大于N并且二进制权重根N相同的数
输入为一个数N(1<=N<=1000000000)
输出一个数,即为最小的一个大于N并且二进制权重跟N相同的数
输入例子:
1717
输出例子:
1718
#include <iostream>
#include <vector>
#include <math.h>
#include <climits>
#include <algorithm>
using namespace std;
unsigned long long getLeftOnePos( unsigned long long N )
{
int ret = 0;
int pos = 0;
unsigned long long m = 1;
unsigned long long sum = 0;
bool flag = false;
unsigned long long M = N;
while( 0 == ( M & 0x1 ) )
{
pos++;
m = m * 2;
M >>= 1;
}
int oneNums = -1;
while( 1 == ( M & 0x1 ) )
{
pos++;
sum += m;
m = m * 2;
M >>= 1;
oneNums++;
}
unsigned long long tmp = (unsigned long long)1 << oneNums;
tmp--;
return m - sum + tmp;
}
int main()
{
int ret = 0;
int N = 0;
while( cin >> N )
{
cout << getLeftOnePos(N) + N << endl;
}
return ret;
}
网易2017校招C++开发工程师(北京)笔试
最新推荐文章于 2024-01-28 21:44:05 发布