您的位置:首页 > 其它

[算法设计与分析]3.2.3数组记录状态信息(互不相同的9位数+圆圈报数游戏)

2018-03-22 20:45 316 查看
#include<stdio.h>
#include<iostream>
#include<string.h>

using namespace std;

void Different();
void CircleGame();
int main()
{
Different();
CircleGame();
}

void Different()
{
long y1, y2;
int p[10], num = 0, t, k;
for(long x = 10000; x < 32000; x++)
{
for(int i = 0; i <= 9; i++)
{
p[i] = 1;
}
y1 = x * x;
y2 = y1;
k = 0;
for(int i = 1; i <= 9; i++)
{
t = y2 % 10;
y2 /= 10;
if(p[t] == 1)
{
k++;
p[t] = 0;
}
else
break;
}
if(k == 9)
{
num++;
cout << "No." << num << ":    n=" << x << "      n^2=" << y1 << endl;
}
}
}

void CircleGame()
{
int n = 4;//假设12个小孩
int interval = 2;//假设每七个数除去一人 即报7的人出圈
int a[100];
int k = 0;//k表示开始报数的人的编号及状态数组的下标变量
int p;//表示已退出圈外的人数

for(int i = 1; i <= n; i++)
{
a[i] = 1;//表示该位置上的孩子参与计数 对全部元素进行初始化
}
p = 0;
int x;//x表示正在报的数
while(p < n - 1)//因为p代表退出圈外的人数因此当p=n-1时结束循环 此时圈中还剩下一个人
{
x = 0;//每次都要对x进行初始化
while(x < interval)//x<7的时候
{
k++;//代表下一个人开始报数
if(k > n)//构成一个圈
k = 1;
x += a[k];//若是a[k]上对应的已经出圈 则a[k]=0此时对x无影响
}
printf("%d  ", k);
a[k] = 0;
p++;
}
for(int i = 1; i <= n; i++)
{
if(a[i] == 1)
printf("\n\nwinner is %d", i);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐