滴水逆向联盟
标题: 基于visual Studio2013解决面试题之0202上下排 [打印本页]
作者: 大灰狼 时间: 2014-8-1 08:58
标题: 基于visual Studio2013解决面试题之0202上下排
本帖最后由 大灰狼 于 2014-8-1 09:00 编辑
题目
解决代码及点评
- <pre code_snippet_id="110182" snippet_file_name="blog_20131213_1_4436148" class="cpp" name="code"><pre code_snippet_id="110182" snippet_file_name="blog_20131213_1_4436148" class="cpp" name="code"><pre code_snippet_id="110182" snippet_file_name="blog_20131213_1_4436148" class="cpp" name="code"><pre code_snippet_id="110182" snippet_file_name="blog_20131213_1_4436148" name="code" class="cpp">/*
- 上下排是指:根据上排的数字,下排对应的数字是上排数字在下排出现的次数,比如
- 0 1 2 3 4 5 6 7 8 9
- 6 2 1 0 0 0 1 0 0 0
-
- 0在下排出现6次
- 1在下排出现2次
- 2在下排出现1次
- ...
- 现在已知上排,求下排
- 思路:
- 不停的循环尝试,一直尝试到下排没有数据修改为止
- */
-
-
- #include <iostream>
- #include <iomanip>
- #include "array"
- using namespace std;
-
-
- int main()
- {
- array<int, 10> a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- array<int, 10> b = a; // 让下排初始化为上排
- bool success = false; // 成功标记,当下排数据不再改变时,则成功了
-
- while (!success)
- {
- bool tmp = true; // 下排变动标记,如果下排有变动,则标记为false,所以初始化为true
-
- for (int i = 0; i < 10; i++) //对上排的每个数和下排的每个数进行循环
- {
- int count = 0; //计数
- for (int j = 0; j < 10; j++)
- {
- if (b[j] == a) // 看下排有多少个和上排i位置的数值相等,如果相等则累加
- {
- count++;
- }
- }
- // 看i位置的下排是不是正好等于累加的count,如果不是,则要修改,一旦修改,这次结果则还是失败的
- if (count != b)
- {
- b = count;
- tmp = false; // tmp置为false表明下排还在动呢,一个数字动了也会导致整个下排错乱
- }
- }
-
- // 讲success置为tmp
- success = tmp;
- }
-
- for (int i = 0; i < 10; i++)
- {
- cout << b << " ";
- }
-
- system("pause");
- return 0;
- }
-
- </pre></pre></pre></pre>
代码下载及其运行 解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果
欢迎光临 滴水逆向联盟 (http://dtdebug.com/) |
Powered by Discuz! X3.2 |