基于visual Studio2013解决面试题之0202上下排

时间:2021-06-01 00:22:23
基于visual Studio2013解决面试题之0202上下排


题目

基于visual Studio2013解决面试题之0202上下排


解决代码及点评

/*上下排是指:根据上排的数字,下排对应的数字是上排数字在下排出现的次数,比如
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]) // 看下排有多少个和上排i位置的数值相等,如果相等则累加
{
count++;
}
}
// 看i位置的下排是不是正好等于累加的count,如果不是,则要修改,一旦修改,这次结果则还是失败的
if (count != b[i])
{
b[i] = count;
tmp = false; // tmp置为false表明下排还在动呢,一个数字动了也会导致整个下排错乱
}
}

// 讲success置为tmp
success = tmp;
}

for (int i = 0; i < 10; i++)
{
cout << b[i] << " ";
}

system("pause");
return 0;
}

代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”

基于visual Studio2013解决面试题之0202上下排

2)在下拉框中选择相应项目,项目名和博客编号一致

基于visual Studio2013解决面试题之0202上下排

3)点击“本地Windows调试器”运行

基于visual Studio2013解决面试题之0202上下排


程序运行结果

基于visual Studio2013解决面试题之0202上下排