zoukankan      html  css  js  c++  java
  • 网易有道2017内推编程题

    网易有道2017内推编程题

    • 两道题,都只要找到了规律就比较好些,然后就是一些细节处理!

    题目一

    • 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;右手拿着4,5,6。在洗牌过程中按顺序放下了6,3,5,2,4,1。把这六张牌再次合成一组牌之后,我们按照从上往下的顺序看这组牌,就变成了序列1,4,2,5,3,6。 现在给出一个原始牌组,请输出这副牌洗牌k次之后从上往下的序列。

    题目二

    • 做取出队头的值操作的时候,并不弹出当前队头。小明同学发现,这段程序恰好按顺序输出了1,2,3,...,n。现在小明想让你构造出原始的队列,你能做到吗?

    • 题目来源nowcoder

    解析

    #include<iostream>
    #include<math.h>
    
    #include <vector>
    #include <string>
    #include <deque>
    #include <stack>
    #include <queue>
    #include <map>
    #include <unordered_map>
    #include <set>
    #include <unordered_set>
    
    #include <algorithm>
    #include <functional>
    #include <numeric> //accmulate
    
    
    #include <fstream>
    #include <iomanip>  //setprecision() setw()
    using namespace std;
    
    //#define cin infile //一定不能再oj系统中,有错,导致超时等!!!
    //C++文件输入
    ifstream infile("in.txt", ifstream::in);
    
    #include <limits>
    #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
    #define INT_MAX       2147483647    /* maximum (signed) int value */
    
    
    //第二题
    #if 1
    
    //反向推到一下:
    
    //将顺序序列处理得出结果
    //比如1 2 3 4 5,先将5插入到3、4之间(隔1),得到1 2 3 5 4,再将4插入到2、3之间(隔2),得到1 2 4 3 5,再将5插入
    //到1、2之间(隔3),得到1 5 2 4 3,最后将3插入到1前面(隔4),得到最终结果:3 1 5 2 4
    //从上面例子可看出,不断的将最后一个元素插入到前面,规律为相隔元素个数依次递增,上面是从1到4
    
    int main()
    {
    	int T;
    	cin >> T;
    
    	for (int i = 0; i < T;i++)
    	{
    		int n;
    		cin >> n;
    		vector<int> vec;
    		for (int i = 0; i < n; i++)
    		{
    			vec.push_back(i + 1);
    		}
    		for (int i = 0; i < n-1; i++)
    		{
    			int back = vec.back();
    			int j = 0;
    			for (j= n-1; j >=n-i-1;j--)
    			{
    				vec[j] = vec[j - 1];
    			}
    			vec[j] = back;
    		}
    		for (int i = 0; i < n;i++)
    		{
    			if (i==0)
    			{
    				cout << vec[i];
    			}
    			else
    			{
    				cout << " " << vec[i];
    			}
    		}
    		cout << endl;
    	}
    	
    	return 0;
    }
    
    #endif
    
    
    //第一题
    #if 0
    
    void fun(vector<int> vec,int k)
    {
    	int n = vec.size() / 2;
    
    	while (k--)
    	{
    		vector<int> n1(vec.begin(), vec.end());
    		for (int i = 0; i < n; ++i)
    		{
    			vec[2 * i] = n1[i];
    			vec[2 * i + 1] = n1[i + n];
    		}
    	}
    
    
    	for (int i = 0; i < vec.size(); i++)
    	{
    		if (i == vec.size() - 1)
    		{
    			cout << vec[i];
    		}
    		else
    		{
    			cout << vec[i] << " ";
    		}
    	}
    	cout << endl;
    }
    
    
    //3
    //3 1
    //1 2 3 4 5 6
    //3 2
    //1 2 3 4 5 6
    //2 2
    //1 1 1 1
    
    
    int main()
    {
    	int T;
    	cin >> T;
    	//vector<vector<int>> vecs;
    	//vector<int> times;
    	for (int i = 0; i < T; i++)
    	{
    		int n, k;
    		cin >> n >> k;
    		//times.push_back(k);
    		vector<int> vec(2 * n); //预先分配了内存才用:	cin >> vec[j];
    		for (int j = 0; j < 2 * n; j++)
    		{
    			/*int data;
    			cin >> data;
    			vec.push_back(data);*/
    			cin >> vec[j];
    		}
    		//vecs.push_back(vec);
    
    		//fun(vec, k);
    
    		for (int i = 0; i < k; i++)
    		{
    			vector<int> left(vec.begin(), vec.begin() + n);
    			vector<int> right(vec.begin() + n, vec.end());
    			vec.clear();
    			for (int j = 0; j < n; j++)
    			{
    				vec.push_back(left[j]);
    				vec.push_back(right[j]);
    			}
    		}
    
    
    		for (int i = 0; i < vec.size(); i++)
    		{
    			if (i == vec.size() - 1)
    			{
    				cout << vec[i];
    			}
    			else
    			{
    				cout << vec[i] << " ";
    			}
    		}
    		cout << endl;
    	}
    
    	//for (int i = 0; i < T;i++)
    	//{
    	//	fun(vecs[i],times[i]);
    	//}
    
    
    
    	return 0;
    }
    
    #endif
    
    
    
    
    #if 0
    
    
    int main()
    {
    	int num = 5;
    	vector<int> table(num);
    	for (int i = 0; i < num; ++i)
    		cin >> table[i];
    	copy(table.begin(), table.end(), ostream_iterator<int>(cout, " "));
    	
    	return 0;
    }
    
    #endif
    
    
  • 相关阅读:
    夜神 虚拟机调试 HBuilder 移动端应用
    maven filter 文件分环境打包部署小问题
    fatal: remote error: CAPTCHA required
    程序员今年是这样计划的
    线程池shutdown与shutdownnow 小例子
    JAVA知识点脉络记忆-刻意练习
    日志
    (职员)2015-12-02 星期三 日志
    (职员)2015-12-04 星期五 周志
    (职员)2015-12-04 星期五 日志
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8652396.html
Copyright © 2011-2022 走看看