码迷,mamicode.com
首页 > 编程语言 > 详细

一本同题库 第一部分 C++语言 --> 第四章 循环结构的程序设计 1099

时间:2020-01-31 00:36:54      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:sqrt   string   问题   理解   racket   nbsp   --   pre   using   

1099:第n小的质数


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 19092     通过数: 9527 

【题目描述】

输入一个正整数n,求第n小的质数。

【输入】

一个不超过10000的正整数n。

【输出】

第n小的质数。

【输入样例】

10

【输出样例】

29

源代码

#include<iostream>
#include<cmath>
using namespace std;
 
int main()
{
    int n;
    int i,j;
    int sum=0;
 
    cin>>n;
    for(i=2;; i++)
    {
        for(j=2; j<=sqrt(i)&&i%j!=0; j++); 
        if(j>sqrt(i))
        {
            sum++;
            if(sum==n)
            {
                cout<<i<<endl;
                break;
            }
        }
    }
 
    return 0;
}
这道题也是寻找素数,这里不仅仅是循环嵌套的重要应用,而且还让我学到了有一些新方法
当第二个for在循环时,并不用加上一些其他的操作,而判断方式均在for中体现
for(j=2; j<=sqrt(i)&&i%j!=0; j++);
可写为:
for(j=2;j<=sqrt(i);j++)
{
if(i%j!=0)
continue;
else
break; //这里当j最大时,j+1>sqrt(i),跳出循环
}
if(j>sqrt(i))
...
这样可以避免运算范围过大,计数重复等问题。

在第一个for循环中,第二个循环条件没有加,是因为这里的运算已经比较复杂,可以不输入范围,而后面的break可以帮助它跳出循环,避免死循环。

这道题中的break的用法以及用第二个for来排查素数的方法都是我所没有想到的,这里的用法也教会了我许多情景下的用法,对break的理解和使用也更加透
彻了,break在很多时候都时辅助跳出循环的好帮手,之后的题目也有很多用到了break跳出循环,也是”一题点醒梦中人”



一本同题库 第一部分 C++语言 --> 第四章 循环结构的程序设计 1099

标签:sqrt   string   问题   理解   racket   nbsp   --   pre   using   

原文地址:https://www.cnblogs.com/jd1412/p/12244227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!