1 条题解

  • 0
    @ 2025-8-24 22:20:39

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar wuyonghuming
    **

    搬运于2025-08-24 22:20:39,当前版本为作者最后更新于2020-04-23 14:37:28,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    思路:

    按照题目说的模拟,我在这里手动模拟一下。

    nn77 , kk66

    写下2,3,4,5,6,72,3,4,5,6,7

    第一轮,找到第一个素数 22,划掉,成为:3,4,5,6,73,4,5,6,7

    第二轮划掉 22 的倍数,成为:3,5,6,73,5,6,7

    第三轮,继续划掉 22 的倍数,成为:3,5,73,5,7

    第四轮, 33 没有被划掉,划掉,成为:5,75,7

    第五轮, 55 没有被划掉,划掉,成为:77

    第六轮,只剩下 77,输出77

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
    	bool s[1001];//来存下这些数
    	int n,k,w=0;//w记录划掉了几个数
    	cin>>n>>k;//输入
    	memset(s,true,sizeof(s));//写下所有数
    	for(int i=2;i<=n;i++)//找没有划掉的数
    	{
    		if(s[i]==true)//如果没有被划掉
    		{
    			for(int j=i;j<=n;j+=i)//找它的倍数
    			{
    				if(s[j]==true)//如果它的倍数没被划掉
    				{
    					w++;//又划掉一个数
    					s[j]=false;//现在它被划掉了
    					if(w==k)//如果已经划掉k个数
    					{
    						cout<<j;//输出答案
    						return 0;//结束
    					}
    				}
    			}
    		}
    	}
    	return 0;//别忘了
    }
    

    谢谢观赏!

    • 1

    信息

    ID
    5437
    时间
    1000ms
    内存
    32MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者