题目
我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……
请你计算第 2019个质数是多少?
思路
想到之前也是一个暴力题目,python运行会超时,但是C++很快。这次我就试了试c++进行暴力。结果没有超时就得出答案了! 然后去试了试python的暴力,超时了,,,
但是太久没写C++了,写起来很生疏,,,
代码
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
int add[2019];
add[0] = 2;
int n = 1;
for(int i=3;n<2019;i++)
{
int flag = 1;
for(int j = 2;j<i;j++)
{
if(i%j == 0)
{
flag = 0;
break;
}
}
if(flag == 1)
{
add[n] = i;
n ++;
}
}
printf("%d", add[2018]);
return 0;
}
题目
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
输入描述
输入的第一行包含一个整数 N。
第二行包含 N 个整数 1,2,⋅⋅⋅,A1,A2,⋅⋅⋅,AN。(注意 A1 ∼ AN 并不一定是按等差数列中的顺序给出)
其中,2≤N≤105,0≤Ai≤109。
输出描述
输出一个整数表示答案。
思路
最开始的想法是,对输入后的数组进行排序,用第二大的数减去第一个数得到公差,如果公差为0,则数列长度为输入的整数n。否则从第一个数依次加公差,加到给出的最大一个数。 测试通过70%。
后面发现思路不对,比如2、6、8、10,按以上思路得到的公差是4,但实际是2。因此遍历排序后的数组,用后一个减去前一个数,记录最小的公差。如果公差为0,则输出当前数列长度n,否则数列长度 = (最大值-最小值)/ 公差 + 1
代码
import os
import sys
# 请在此输入您的代码
n = int(input())
data = list(((map(int, input().split()))))
data.sort()
start = data[0]
end = data[n-1]
add = data[1] - data[0] # 公差
for i in range(n-1):
temp = data[i+1] - data[i]
if temp < add:
add = temp
if add == 0:
print(n)
else:
count = (data[n-1] - data[0]) / add
print(int(count + 1))