VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 629|回复: 2

求算法(隔2个删去一个数)

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-31 12:20:01 | 显示全部楼层 |阅读模式
一个圆周上写着1到100,从1开始,沿着顺时针方向,隔2个删去一个数,问经过多少次才能删到数字1?最后删除的是几?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-11 23:00:01 | 显示全部楼层
#include <stdio.h>
int main()
{
        typedef struct Node
        {
                int data;
                Node *next;
        }Node;

        Node *head,*tail;

        head=new Node;
        head->data=1;
        head->next=NULL;
        tail=head;

        for(int i=2;i<=100;i++)
        {
                Node *temp=new Node;
                temp->data=i;
                temp->next=NULL;
                tail->next=temp;
                tail=temp;
        }
        tail->next=head;

        Node *temp=head;
        Node *temp1,*temp2;
        int count=0;       
        while(1)
        {
                temp1=temp->next->next;
                temp2=temp1->next;
                temp1->next=temp2->next;
                temp=temp1;
                count++;

                if(temp2->data == 1)
                {
                        printf("经过%d次删除1\n",count);
                //        break;
                }
                if(count == 100)
                {
                        printf("最后删除的是:%d\n",temp2->data);
                        break;                       
                }
                delete temp2;
        }
        delete temp2;
        return 0;
}
求得结果为:经过98次删除1,最后一个被删除的是92。
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-12 16:15:01 | 显示全部楼层
锻炼 初学者的逻辑思维能力
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表