用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出

本文介绍了一个从1至N的数数游戏,每次数到M时输出该数,直至N结束。通过创建循环链表实现游戏逻辑,并在用户输入M和N后进行演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原创地址:http://blog.163.com/wupengzhi2005@126/blog/static/17101002201082992252813/


// 用户输入M,N值,从1至N开始顺序

// 循环数数,每数到M输出该数值,
// 直至全部输出
#include   < stdio.h >

// 节点
typedef   struct  node
{
     int  data ;
    node *  next ;
} node ;

// 创建循环链表
void  createList ( node *&  head ,  node *&  tail ,   int  n )
{
     if ( n < 1 )
     {
        head  =   NULL ;
         return   ;
     }
    head  =   new  node ();
    head -> data  =   1 ;
    head -> next  =   NULL ;
    
    node *  p  =  head ;
     for ( int  i = 2 ; i < n + 1 ; i ++)
     {
        p -> next  =   new  node ();
        p  =  p -> next ;
        p -> data  =  i ;
        p -> next  =   NULL ;
     }
    
    tail  =  p ;
    p -> next  =  head ;
}

// 打印循环链表
void  Print ( node *&  head )
{
    node *  p  =  head ;
    
     while ( &&  p -> next != head )
     {
        printf ( "%d " ,  p -> data );
        p = p -> next ;
     }
     if ( p )
     {
        printf ( "%d/n" ,  p -> data );
     }
}

// 用户输入M,N值,从1至N开始顺序
// 循环数数,每数到M输出该数值,
// 直至全部输出
void  CountPrint ( node *&  head ,  node *&  tail ,   int  m )
{
    node *  cur  =  head ;
    node *  pre  =  tail ;
    
     int  cnt  =  m - 1 ;
     while ( cur  &&  cur != cur -> next )
     {
         if ( cnt )
         {
            cnt --;
            pre  =  cur ;
            cur  =  cur -> next ;
         }
         else
         {
            pre -> next  =  cur -> next ;
            printf ( "%d " ,  cur -> data );
             delete  cur ;
            cur  =  pre -> next ;
            cnt  =  m - 1 ;
         }     
     }
    
     if ( cur )
     {
        printf ( "%d " ,  cur -> data );
         delete  cur ;
        head  =  tail  =   NULL ;
     }
    printf ( "/n" );
}

int  main ()
{
    node *  head ;
    node *  tail ;
     int  m ;
     int  n ;
    scanf ( "%d" ,   & n );
    scanf ( "%d" ,   & m );
    createList ( head ,  tail ,  n );
    Print ( head );
    CountPrint ( head ,  tail ,  m );
     return   0 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值