好久不見各位,校招也算告一段落了,博主有很多收穫和成長,希望有機會分享給大家,同時也歡迎大家把感悟分享給我哦!但是今天我只是來分享一下網易2018校園招聘的部分編程題的個人思路和代碼實現。
first:魔法幣
小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩臺魔法機器可以通過投入x(x可以爲0)個魔法幣產生更多的魔法幣。魔法機器1:如果投入x個魔法幣,魔法機器會將其變爲2x+1個魔法幣魔法機器2:如果投入x個魔法幣,魔法機器會將其變爲2x+2個魔法幣小易採購魔法神器總共需要n個魔法幣,所以小易只能通過兩臺魔法機器產生恰好n個魔法幣,小易需要你幫他設計一個投入方案使他最後恰好擁有n個魔法幣。
//魔法幣
#include<iostream>
using namespace std;
#include<stack>
stack<int> Select(long long money){
stack<int> result;
bool prev=0;
while(money>0){
if(money%2==0){//判斷N是偶數//選擇二號機
result.push(2);
money=money/2-1;
}
else{//判斷N不是偶數
result.push(1);
money=(money-1)/2;
}
}
return result;
}
int main(){
long long money;
cin>>money;
if(money>=1&&money<=1000000000){
stack<int> result=Select(money);
while(!result.empty()){
cout<<result.top();
result.pop();
}
cout<<endl;
}
return 0;
}
second:相反數#include<iostream>
using namespace std;
//相反數
int IsOpposite(int n){
int sum=0;//先存相反數的值//後存整數和該整數相反數的和
int num=n;//做運算得到相反數的中間值
while(num>0){
int tmp=num%10;//存num除以10的餘
sum=sum*10+tmp;//當前相反數的值
num=num/10;//num取整
}
return sum+n;//整數和該整數相反數的和
}
int main(){
int n;
cin>>n;
if(n>=1 && n<100000){
cout<<IsOpposite( n)<<endl;
}
return 0;
}
//字符碎片
#include<iostream>
using namespace std;
#include<string>
float Avglen(string & str){
float sum=0;
int num=1;
int size=str.size();
char ch=str[0];
for(int i=0; i<size; i++){
if(ch != str[i]){
num++;
ch =str[i];
}
sum++;
}
return sum/num;
}
int main(){
string str;
cin>>str;
if(str.size()>=1 && str.size()<=50){
float result=Avglen( str);
printf("%.2lf", result);
}
return 0;
}
#include<iostream>
using namespace std;
#include<string>
float Avglen(const char* str){
float sum=0;//用來存儲字符串長度
int num=1;//存儲字符碎片個數
char ch=*str;//前一個字符
const char* tmp=str;
while('\0' != *tmp){
if(ch != *tmp){
num++;
ch =*tmp;
}
sum++;
tmp++;
}
return sum/num;
}
int main(){
string str;
cin>>str;
if(str.size()>=1 && str.size()<=50){
float result=Avglen(str.c_str());
printf("%.2lf", result);
}
return 0;
}
小易有一個長度爲N的正整數數列A = {A[1], A[2], A[3]..., A[N]}。牛博士給小易出了一個難題:對數列A進行重新排列,使數列A滿足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍數。小易現在需要判斷一個數列是否可以重排之後滿足牛博士的要求。
//n-1個數能被2整除,至少有一個能被4整除
#include<iostream>
using namespace std;
#include<vector>
long long aim[100000]={0};
bool IsSuit(int n){
int num=0;
for(int i=0; i<n; i++){
if(aim[i]%2 == 0){
num++;
if(aim[i]%4 == 0)
num++;
}
}
if(num>=n) return true;
return false;
}
int main(){
int t;
cin>>t;
int n;
if(1<=t && t>=10){
for(int i=0; i<t; i++){
cin>>n;
if(n<1 || n>100000) continue;
for(int j=0; j<n; j++){
cin>>aim[j];
}
if(IsSuit(n))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
分享如上,望共同進步,交流學習,願看文的朋友們都能得償所願,心想的事兒都能成!^_^