首页 > 其他 > 详细

谁买单,猴子选大王等类似题目不同解法!!!

时间:2015-11-29 23:02:57      阅读:339      评论:0      收藏:0      [点我收藏+]

题目描述

三五好友,相邀畅谈,围一圆桌,饭后报数,以决买单。从第一个人开始报数(从1到3报数)凡报到3的人就不用买单,退出圈子。问最后留下要买单的是原来第几号的人。

输入

多组测试数据,输入整个n( n < 50 ),表示n个人。

输出

输出买单的人。

样例输入

8

样例输出

7
---------------------------------------------------------------------------------------------
题目比较简单,就是把一个个的数组找到一个数就向前移一个;
直接上代码
#include <cstdio>
//#define _OJ_
int main(int argc, char const *argv[]) {
#ifndef _OJ_  //ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif

    int a[100];
    int i, j, n, cnt = 0;
    scanf("%d", &n);
    for(i = 1;i <= n; i++)//每个都按顺序赋值
    a[i] = i;
    i = 1;

      while(i <= n) {
      cnt++;
      if(cnt == 3) {
        for(j = i;j <= n; j++)//逐个向前移一个
        a[j] = a[j + 1];
        cnt = 0;    n = n - 1;
    }
    else
         i++;
         if(n == 1)    break;//n == 1结束
         if(i > n)    i = 1;//返回第一个
    }

    printf("%d\n", a[1]);
    return 0;
}
-----------------------------------------------------------------------------------------------

题目描述

m只猴子要选大王,选举办法如下:所有猴子按照1..m编号站成一个圆圈,从1号开始按照1、2、3……n报数,凡报到n的猴子退出到圈外,如此循环,直到圆圈内只有一只猴子时,这只猴子为大王。 其中:0<m,n<100

输入

m和n。

输出

大王猴子的编号。

样例输入

4 2

样例输出

1

---------------------------------------------------------------------------------------------
此题目和上面的题目大同小异,不过除了可以用循环来做之外学了数据结构还可以用循环链表来做;
这样围成一个圈更加的形象;
------------------------------------------------------------------------------------------

#include <cstdio>
#include <cstdlib>
#define _OJ_
typedef struct Lnode
{
    int data;
    struct Lnode *next;
} Lnode, *Linklist;
 
void Creat_List(Linklist L, int n)
{
    int i;
    Linklist p, head;
    head = L;
    L->data = 1;
    for(i = 2;i <= n; i++) {
    p = (Linklist) malloc (sizeof(Lnode));
    p->data = i;
    head->next = p;
    head = p;
    }
    head->next = L;
     
}
 
void Delete_List(Linklist L)
{
    L->next = L->next->next;
}
 
/*void fun(Linklist L, int n)
{
    //printf("n==%d\n",n);
    int i = 1;
    Linklist p;
    p = L;
        while(i != n - 1)
        {
        //printf("%d\n",p->data);
        i++;//printf("i==%d\n",i);
        p = p->next;
        }
        Delete_List(p);
}*/
 
 
 
int main(int argc, char const *argv[]) {
#ifndef _OJ_  //ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
 
    int i = 1, cnt = 0;
    Linklist L, head, p;
    int m, n;
    L = (Linklist) malloc (sizeof(Lnode));
    head = L;
    scanf("%d %d", &m, &n);
    Creat_List(L,m);
    while (L->next != L)
    {
        if(i == n - 1)
        {
            Delete_List(L);
            L = L->next;
            i = 1;
        }
        else
        {
            i++;
            L = L->next;
        }
         
    }
    printf("%d\n", L->data);
    return 0;
}
 -----------------------------------------------------------------------------------------------------------------------







谁买单,猴子选大王等类似题目不同解法!!!

原文:http://www.cnblogs.com/airfand/p/5005796.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!