
题目
解决代码及点评
/* 上下排是指:根据上排的数字,下排对应的数字是上排数字在下排出现的次数,比如 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调试器”运行
程序运行结果