华为笔试2016编程题

华为笔试2016编程题

1.删数

有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

 1 #include <iostream>
 2 using namespace std;
 3 struct Node
 4 {
 5     int val;
 6     Node *next;
 7 };
 8  
 9 const int N = 1000;
10 //const int null=0;
11  
12 int main()
13 {
14     int n;
15     while(cin>>n)
16     {
17         if(n>1000)
18         n = 1000;
19         //初始化Node结构,生成头节点
20         Node *head = new Node;
21         head->val = 0;
22         head->next = NULL;
23         Node *p = head; //成环
24         //初始化数据
25         for(int i=1;i<n;i++)  //注意初始化节点已经为0,下一个节点从1开始
26         {
27             Node *tmp = new Node;
28             tmp->val = i;
29             tmp->next = NULL;
30             head->next = tmp;
31             head = head->next; //上一个节点是下一个节点的前节点    
32             //cout <<head->data<<endl;      
33         }
34         head->next = p; //最后一个地址指向头节点,成环
35  
36         while(p!=p->next) //如果没有循环到初始位置
37         {
38             p->next->next = p->next->next->next;//将p的向下第二个指向位置改为指向第三个,替换第二个
39             p = p->next->next;
40         }   
41         cout << p->val <<endl;   //最后即为想要的结果
42     }
43     return 0;
44 }

2.字符集合

输入一个字符串,求出该字符串包含的字符集合

输入描述:

每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

输出描述:

每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<algorithm>
 5 using namespace std;
 6 int main()
 7 {
 8     string s1;
 9     while(cin>>s1)
10     {
11        int n=s1.size();
12        vector<char> vec;
13        for(int i=0;i<n;i++)  
14        {
15             vector<char>::iterator it = find(vec.begin(),vec.end(),s1[i]);
16             if(it==vec.end())
17                 vec.push_back(s1[i]);
18         }
19         for(int i =0;i<vec.size();i++)
20             cout<<vec[i];
21         cout<<endl;
22     }
23     return 0;
24 }

3.数独

数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。

输入描述:

输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。

输出描述:

输出九行,每行九个空格隔开的数字,为解出的答案。

分析:没搞出来,看评论说是测试用例的问题,存在多解

posted @ 2017-08-23 15:41  walanwalan  阅读(664)  评论(0编辑  收藏  举报