九度oj 1189

题目1189:还是约瑟夫环

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:810

解决:513

题目描述:

生成一个长度为21的数组,依次存入1到21;
建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每个结点中;
将上述链表变为单向封闭(循环)链表;从头结点开始数,将第17个结点删除,将它的下一个结点作为新的头结点;
重复上述过程,直到该链表中只剩一个结点,显示该结点中存入的数字。

输入:

没有任何输入数据。

输出:

输出上面题目描述中最后剩下的节点中存入的数字。

样例输入:
 
    
样例输出:
 
    
提示:

请不要直接输出数据水过去,这样达不到提升自己的目的,
请按照题目要求来做题,这样到真正考试时才能应对自如。

来源:
2003-2005年华中科技大学计算机研究生机试真题
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
typedef struct cirnode
{
        int data;
        struct cirnode *link;
        }cirnode;
int main()
{
    int a[22];
    for(int i=1;i<=21;i++)
    {
            a[i]=i;
            }
    cirnode *first;
  first =(cirnode*)malloc(sizeof(cirnode));
    first->link=NULL;
    cirnode *newnode,*last;last=first;
    for(int i=1;i<=21;i++)
    {
            newnode=(cirnode*)malloc(sizeof(cirnode));
            newnode->data=a[i];
            last->link=newnode;
            last=last->link;
            }
            last->link=first->link;
            int k=21,cnt=1;
            last= first->link;
             cirnode *q;q=first;
            while(k>1)
            {
               
                                    
                  if(cnt==17)
                  {
                        last=last->link;
                        q->link=last;  
                      
                      k--;
                      cnt=1;
                      }
                      else
                      {
                      cnt++;
                      last=last->link;
                      q=q->link;
                      }
                      }   
                      cout<<last->data<<endl;
                      
                      }                            
            


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值