原题大概是这样的:    //输入一个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; }       
点赞 2
评论 0
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务