#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);
}
}
[算法设计与分析]3.2.3数组记录状态信息(互不相同的9位数+圆圈报数游戏)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.