C++ 求n以内降序前k项之和
求n以内降序前k项之和样例:
测试输入:9994 7
预期输出:9973 9967 9949 9941 9931 9929 9923 69613
测试输入:13 9
预期输出:13 11 7 5 3 2 41
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, k, sum=0, t=0;
cin >> n >> k;
for(int i = n; i>2; i--)
{ int m=0;
for(int j = 2; j < n/2; j++)
{
if(i % j==0)
m++; //取余得0,即能整除,m+
}
if(m==0) //为0,i为素数
{
t++; //已判断的素数个数
if(i>=2 && t<=k)
{
printf("%d ",i);
sum += i;
}
else break;
}
}
cout << "=" <<sum;
return 0;
}
样例第一个能过,第二个不行,不知道问题出在哪里了 看不懂问题,我需要解释一下这个
测试输入:9994 7
预期输出:9973 9967 9949 9941 9931 9929 9923 69613
这个输入是怎么算出这个结果的 没看懂题意,不过我调试的时候
i=5的时候,m是1
这显然不对,第10行是不是写错了?
for(int j = 2; j < n/2; j++)
应该是?
for(int j = 2; j <= i/2; j++)
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, k, sum=0, t=0;
cin >> n >> k;
for(int i = n; i>=2; i--)
{ int m=0;
for(int j = 2; j <= i/2; j++)
{
if(i % j==0)
m++; //取余得0,即能整除,m+
}
if(m==0) //为0,i为素数
{
t++; //已判断的素数个数
if(i>=2 && t<=k)
{
printf("%d ",i);
sum += i;
}
// else break;
}
}
cout << "=" <<sum;
return 0;
}
人造人 发表于 2020-4-25 16:00
没看懂题意,不过我调试的时候
i=5的时候,m是1
这显然不对,第10行是不是写错了?
啊 对的 那里错了
题意是找n以内的素数降序,前k个输出,最后相加
比如13 5
13以内的素数是:
13 11 7 5 3 2
1 23 4 5 6(k)
所以是:13 11 7 5 3 =39 龙龙龙龙龙龙 发表于 2020-4-25 16:13
啊 对的 那里错了
题意是找n以内的素数降序,前k个输出,最后相加
比如13 5
嗯,大概理解了题意了
人造人 发表于 2020-4-25 16:20
嗯,大概理解了题意了
出来了 主要就是把n改成i,太粗心,非常感谢!
页:
[1]