我会精选几道个人觉得有难度的题目,并分享自己的解法。
以下是题目目录
1、乎乎的幸运数字 |
2、求以下三数的和, 1+2+...+a + 12+22+...+b2 + 1/1+1/2+...+1/c |
3、质数判断 |
4、百鸡问题 |
5、编程求 1!+2!+3!+...+N! |
6、一次函数 |
以下是第一道题的题目描述
题目链接https://ac.nowcoder.com/acm/contest/68233/A
题目本身不难理解 ,就是求L和R之间数字包含k的个位数的个数,题目只要求我们求个位数,这无疑减少了题目难度,下面看看我是如何实现的
#include<iostream>
using namespace std;
int main()
{
int k=0;
int l=0;
int r=0;
cin>>k;
cin>>l;
cin>>r;
int sum=0;
for(int i=l;i<=r;i++)
{
int gewei=i%10;
if(gewei==k||i%k==0)
{
sum+=i;
}
}
cout<<sum;
}
注意我的if判断里面讨论了i是否为个位数的情况。
这道题难度不大,下面看下一道
题目链接 https://ac.nowcoder.com/acm/contest/68233/B
乍一看有点复杂,实际上只需要分别求三个数组的和就行了,注意c数列记得把c的类型设置成浮点型的,下面看代码
#include<iostream>
using namespace std;
int main()
{
int a=0,b=0,c=0;
cin>>a>>b>>c;
double sum1=0;
double sum2=0;
double sum3=0;
for(int i=1;i<=a;i++)
{
sum1+=i;
}
for(int j=1;j<=b;j++)
{
sum2 = sum2 + j*j;
}
double k=1;
while(k<=c)
{
sum3+=1/k;
k++;
}
double result=sum1+sum2+sum3;
printf("%.2lf",result);
}
第三题 :题目链接https://ac.nowcoder.com/acm/contest/68233/D
下面是我的代码实现
#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(long long n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
long long n;
cin >> n;
if (isPrime(n)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
这里我先封装好了一个判断是否为质数的布尔类型的函数函数,因为n的取值范围比较大,所以我选择了long long类型。当传入n的参数时,函数判断n是否为1,大于一的话进入for循环让n反复除i的值,知道i>=n的平方根,如果但凡有一个数能除尽,就返回0,否则返回1。
四:https://ac.nowcoder.com/acm/contest/68233/K
别看字这么多,完全是纸老虎,老方法三层由小到大枚举一遍就行了,上代码
#include<iostream>
using namespace std;
int main()
{
int x=0,y=0,z=0,n=0,m=0;
cin>>x>>y>>z>>n>>m;
int count = 0;
for(int i = 0;i <= m/x;i++)
{
for(int j = 0;j <= m/y;j++)
{
for(int k = 0;k <= m;k++)
{
if(i + j + k == m&&x*i +y*j + (k/z) == n&&k % z ==0)
{
count++;
}
}
}
}
cout<<count<<endl;
}
我编的时候还是有点混乱的,毕竟字母太多了
第五题:https://ac.nowcoder.com/acm/contest/68233/I
这题我们可以先封装一个求阶乘的函数,最好别用递归,不然计算量可能会太大了,导致超时
下面是我用循环的写法
#include<iostream>
using namespace std;
long long func(int n)
{
int ret = 1;
for(int i=1;i<=n;i++)
{
ret *= i;
}
return ret;
}
int main()
{
int n=0;
cin>>n;
long long sum = 0;
for(int i=1;i<=n;i++)
{
sum += func(i);
}
cout<<sum;
}
最后一题:E-一次函数_程序设计基础-循环综合练习 (nowcoder.com)
可能是文字量最大的一道题,但核心思想依然是循环,可以类比百钱买百鸡问题,代码其实并不复杂,以下是我实现的代码
#include<iostream>
using namespace std;
int main()
{
int n=0;
int x=0,y=0;
int k=0,b=0;
cin>>n>>k>>b;
int count=0;
for(int i=0;i<n;i++)
{
cin>>x>>y;
if(y == k*x + b)
{
count++;
}
}
cout<<count;
}
实际上只用了一次循环,妥妥的纸老虎。
以上是经过我和学校双重精选的题目,希望做了这些题目的你也能变得更强大