题目
解决代码及点评
/*上下排是指:根据上排的数字,下排对应的数字是上排数字在下排出现的次数,比如
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)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果