关于巨人网络笔试题
原题大概是这样的:
//输入一个n,得到一个从1到n的数组,将第一个数抛弃,再将新的在前面的数放到最后,直到还剩最后一个数
本人用了队列实现了这个功能,然后通过队列实现的结果找出了规律。比如:
由此得出输出是第几个数的公式为:
(n-2^((int)sqrt(n))*2
以下是代码部分:
#include <iostream>
#include <queue>
#include "math.h"
using namespace std;
int deleteNum(int numList[],int n);
int main(){
int n;
cout<<"输入数组规模:"<<endl;
while(cin>>n){
cout<<endl;
int numList[n];
for(int i=0;i<n;i++){
cin>>numList[i];
}
deleteNum(numList,n);
cout<<"输入数组规模:"<<endl;
}
return 0;
}
int deleteNum(int numList[],int n){
queue<int> numQueue;
for(int i=0;i<n;i++){
numQueue.push(numList[i]);
}
while(numQueue.size()>1){
numQueue.pop();
numQueue.push(numQueue.front());
numQueue.pop();
}
cout<<"当输入的数组规模为"<<n<<"时,"<<"输出的最后一个数为第:" <<endl;
cout<<numQueue.front()<<"个数"<<endl;
cout<<"找规律得出的答案:"<<endl;
//找规律的结果为:(n-2^(int)(√n) )*2
int sqrtN = floor(sqrt(n)); //开根
int value = 2<<(sqrtN-1); //2的sqetN次方
int result = (n-value)<<1;
if(result==0){
cout<<n<<endl;
}
else
cout<<result<<endl;
cout<<endl;
}
#阿里巴巴##网易##完美世界##C++工程师##include <queue>
#include "math.h"
using namespace std;
int deleteNum(int numList[],int n);
int main(){
int n;
cout<<"输入数组规模:"<<endl;
while(cin>>n){
cout<<endl;
int numList[n];
for(int i=0;i<n;i++){
cin>>numList[i];
}
deleteNum(numList,n);
cout<<"输入数组规模:"<<endl;
}
return 0;
}
int deleteNum(int numList[],int n){
queue<int> numQueue;
for(int i=0;i<n;i++){
numQueue.push(numList[i]);
}
while(numQueue.size()>1){
numQueue.pop();
numQueue.push(numQueue.front());
numQueue.pop();
}
cout<<"当输入的数组规模为"<<n<<"时,"<<"输出的最后一个数为第:" <<endl;
cout<<numQueue.front()<<"个数"<<endl;
cout<<"找规律得出的答案:"<<endl;
//找规律的结果为:(n-2^(int)(√n) )*2
int sqrtN = floor(sqrt(n)); //开根
int value = 2<<(sqrtN-1); //2的sqetN次方
int result = (n-value)<<1;
if(result==0){
cout<<n<<endl;
}
else
cout<<result<<endl;
cout<<endl;
}
