#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位數+圓圈報數遊戲)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.