猴子选王c语言链表程序代码,c/c++编程题 之 猴子选大王(数组、链表两种方法)...
題目描述
一群猴子要選新猴王。新猴王的選擇方法是:讓N只候選猴子圍成一圈,從某位置起順序編號(hào)為1-N號(hào)。從第1號(hào)開始報(bào)數(shù),每輪從1報(bào)到3,凡報(bào)到3的猴子即退出圈子,接著又從緊鄰的下一只猴子開始同樣的報(bào)數(shù)。如此不斷循環(huán),最后剩下的一只猴子就選為猴王。請(qǐng)問是原來第幾號(hào)猴子當(dāng)選猴王?
輸入
輸入在一行中給一個(gè)正整數(shù)N(<=1000)。
輸出
在一行中輸出當(dāng)選猴王的編號(hào)。
樣例輸入
11
樣例輸出
7
AC代碼如下:
#include "iostream"
using namespace std;
int main(int argc, char* argv[])
{
int count=0,num,i;
int a[1010],n;
cin>>n;
num=n;//記錄未退出的猴子數(shù)
for (i=1;i<=n;i++)
{
a[i]=1;//每個(gè)猴子標(biāo)記為1,表示該猴子未退出
}
while(num!=1)//當(dāng)只有一猴子時(shí),退出循環(huán)
{
for (i=1;i<=n;i++)
{
if (a[i]==1)
{
count++;
}
if (count==3)
{
a[i]=0; //
num--; //退出一只猴子
count=0;
}
}
}
for (i=1;i<=n;i++)
{
if (a[i]==1)//輸出最后剩下的那只猴子,猴王
{
cout<
break;
}
}
return 0;
}
鏈表實(shí)現(xiàn):
#include
#include
using namespace std;
struct node{
int data;
int last;
int next;
};
struct node a[1100];
int main(int argc, char** argv) {
int n;
while(scanf("%d",&n)==1)
{
for(int i=2;i
{
a[i].data=i; a[i].last=i-1; a[i].next=i+1;
}
a[1].data=1; a[1].last=n; a[1].next=2;
a[n].data=n; a[n].last=n-1; a[n].next=1;
int num=1; //記錄報(bào)數(shù)次數(shù)
int count=1; //記錄當(dāng)前猴子的序號(hào)
while(a[count].next!=a[count].data)
{
if(num%3==0)
{
a[a[count].last].next=a[count].next;
a[a[count].next].last=a[count].last;
}
num++;
count=a[count].next;
}
printf("%d\n",a[count].data);
}
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的猴子选王c语言链表程序代码,c/c++编程题 之 猴子选大王(数组、链表两种方法)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统中扩展一个逻辑卷,Linu
- 下一篇: c语言程序 用追赶法求解方程组,编写用追