佐助题库1000,1003,1008,1009,1019,1020

这是我的第一个作品。

1000: 求1+2+3+.....+n

题目

根据用户输入的任意n,求1+2+3+.....+n的值。

输入样例

100

输出样例

5050

这道题非常简单,用for循环,从一到n,累加到变量x,再输出x。

#include <bits/stdc++.h>
using namespace std;
int n,x;
int main() {
	cin>>n;
	for(int i=1;i<=n;i++){
		x+=i;
	}
	printf("%d",x);

	return 0;
}

1003:水仙花数

题目

水仙花数是指一个三位数,其各位数字的立方和等于该数本身。 

例如:153是一个水仙花数,因为:1^3+5^3+3^3=153

3位数的水仙花数共有4个,请编写程序,求出这4个水仙花数,每行一个。

还是使用for循环,从100到999,每次定义三个变量x,y,z,分别获取百位、十位、个位。如果它们三次方的和等于i,就输出来。

#include <iostream>
using namespace std;
int main()
{
    int a=100,x,y,z;
    while(a<999){
        a++;
        x=a/100;
        y=(a/10)%10;
        z=a-(x*100)-(y*10);
        if((x*x*x)+(y*y*y)+(z*z*z)==a){
        printf("%d ",a);
        }
    }
    return 0;
}

1008: 求Sn=1!+2!+3!+4!+5!+…+n!

题目

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字
n! = n * (n-1) * (n-2) .....3*2*1

输入样例

5

输出样例

153

n!就是n的阶乘,5!=1*2*3*4*5,4!=1*2*3*4,3!=1*2*3,2!=1*2,1!=1,因此可以看出,这道题可以用双重循环。

外层:

i=1;i<=n;i++;

内层:

j=1;j<=i;j++;

但是,也不难发现,在计算5!的过程中,已经计算了4!、3!、2!、1!,所以更简单的方法:

在计算n!的过程中把中途的每个值都加起来。

注意:阶乘的结果较大,用long long。

#include <bits/stdc++.h>
using namespace std;
int main() {
    long long n, a = 0, b=1;
    cin >> n;
    for (int i = 1; i <= n; i++) {
            b *= i;
            a += b;
        }
 
    cout << a;
 
    return 0;
}

1009: 同因子数查找

题目

求出10至1000之内能同时被2、3、7整除的数,并输出。

#include <iostream>
#include <cstdio>
#include <stdio.h>
using namespace std;
int main() {
	for(int i=10;i<=1000;i++){
		if(i%2==0&&i%3==0&&i%7==0){
			printf("%d\n",i);
		}
	}

	return 0;
}

1019: 求阶乘

题目

求任意给定整数的阶乘。阶乘的表示方法为:3! = 3 * 2 * 1
n != n * (n-1) * (n-2) * .....*1
0 ! = 1

输入样例

3

输出样例

6

和1008是一个道理,只不过不用加中间的数。

#include <iostream>
using namespace std;
int main()
{
	long long n,a=1;
	cin>>n;
	for(int i=n;i>=1;i--)
	{
		a*=i;
	}
	cout<<a;
	
	return 0;
}

1020:判断一个数是否是素数

题目

素数(prime number)又称质数。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。1不是素数。

如果输入的数是素数则输出Yes,否则输出No。

输入样例

3

输出样例

Yes

首先1要特殊判断,后面的用for循环判断。但是要注意最大10e19,一秒也就10e8,得减少次数。如果一个合数(非素数)的因数a>\sqrt{}n,但n/a,也就是另一个因数一定小于\sqrt{}n,所以,合数就能用它的平方根次算出来。

#include <bits/stdc++.h>
using namespace std;
int main() {
	long long n;
	cin>>n;
	if(n==1){
		cout<<"No";
		return 0;
	}
	for(long long i=2;i<=sqrt(n);i++){
		if(n%i==0){
			cout<<"No";
			return 0;
		}
	}
	cout<<"Yes";

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值