37 条题解
-
21
这一道题只需要把循环中的参数弄明白就简单许多啦~
- 首先是输入一个整数 n(没问题,绝对没问题!)
- 然后是把从 1!+ 2!+···+ n!(没问题~)
- 所以外循环的参数是从 1 ~ n(同样,没问题!)
- 然后每一个n!都是从 1 * 2 * 3 * ··· * n(绝对没问题!)
- 所以内循环的参数是从 1 ~ n(一样的)
最后写出来的代码记得加上总数 sum 哦(AC过,别问了)
#include <bits/stdc++.h> using namespace std; int main() { int n, sum = 0; cin >> n; for (int i = 1; i <= n; i++) { int N = 1; for (int j = 1; j <= i; j++) N *= j; sum += N; } cout << sum; return 0; }
-
6
首先要明白什么是阶乘, 如: 5的阶乘为:5!=1×2×3×4×5=120 3的阶乘为:3!=1×2×3=6 则N的阶乘为:N!=1×2×......×(N-1)×N N的阶乘求法:可以从for循环让变量从1遍历到N,每次遍历将当前数字累乘到一个提前定义好的变量中即可,且该变量初始值必须为1。 核心代码:
int ans=1; //定义变量用来存放N的阶乘 for(int j=1;j<=N;j++) //从1遍历到N,不断乘当前数字,循环结束后ans中即为N的阶乘 { ans*=j; //如N为5时,循环执行5次,ans=1*2*3*4*5 }
其次要求阶乘和,题目当中给的数据都比较小,所以不用考虑别的,只需从1开始遍历到N,每次遍历求出当前数字的阶乘并累加到sum变量中即可。
核心代码:
int sum=0; //定义计算总和变量sum,用来存放阶乘和 for(int i=1;i<=N;i++) //要求1!+2!+...+N!,从1遍历到N(该处N与上面求阶乘的N不一样) { //for循环求出当前数字i的阶乘ans sum+=ans; //将当前数字i的阶乘累加到sum中 }
循环结束后,sum中即为所求数字的阶乘之和。
-
3
#include <iostream> using namespace std; int main() { cout<<153; }
最短的。
上面这个开玩笑的,先来捋捋思路: 1,定义一个函数,用来完成!的作用: (1)定义变量sum,初始化为1(0乘任何数都得0) (2)循环n次,每次将sum乘i。 2,接下来循环累加,我就不多说了。 上代码!(已AC)
#include <bits/stdc++.h> using namespace std; int g(int n) { int sum=1; for (int i=1;i<=n;i++) sum=sum*i; return sum; } int main() { int n;cin>>n;int sum=0; for (int i=1;i<=n;i++) sum+=g(i); cout<<sum; return 0; }
习惯化简了,看不懂的把每行代码用分号隔开,循环和判断把空格后面的加上大括号就行了。
-
2
#include <iostream> using namespace std; int main() { cout<<153; }
最短的。
上面这个开玩笑的,先来捋捋思路: 1,定义一个函数,用来完成!的作用: (1)定义变量sum,初始化为1(0乘任何数都得0) (2)循环n次,每次将sum乘i。 2,接下来循环累加,我就不多说了。 上代码!(已AC)
#include <bits/stdc++.h> using namespace std; int g(int n) { int sum=1; for (int i=1;i<=n;i++) sum=sum*i; return sum; } int main() { int n;cin>>n;int sum=0; for (int i=1;i<=n;i++) sum+=g(i); cout<<sum; return 0; }
习惯化简了,看不懂的把每行代码用分号隔开,循环和判断把空格后面的加上大括号就行了。
-
2
打表法//娱乐用
#include <cstdio> int a[11] ; void geter(){//打表 //从out.txt里复制出来 a[1] = 1 ; a[2] = 3 ; a[3] = 9 ; a[4] = 33 ; a[5] = 153 ; a[6] = 873 ; a[7] = 5913 ; a[8] = 46233 ; a[9] = 409113 ; a[10] = 4037913 ; } inline int reader(){//快读(用在这题有些多余了) int it = 0, chr = getchar(); while('0' > chr || chr > '9') chr = getchar(); while('0' <= chr && chr <= '9') it = it * 10 + chr - '0' ,chr = getchar() ; return it ; } int main(){ geter() ; printf("%d",a[reader()]) ; /* //打表代码部分 //保存于out.txt freopen("out.txt","w",stdout) ; //套100层循环都没问题 //打表只要能出正确结果就行了 //这里的时间复杂度不重要 for(int i = 1 ; i <= 10 ; i ++){ int m = 0 ; for(int j = 1 ; j <= i ; j ++){ int n = 1 ; for(int k = 1 ; k <= j ; k ++) n *= k ; m += n ; } printf(" a[%d] = %d ; \n" , i , m) ; } */ return 0 ; }
信息
- ID
- 11
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 4
- 标签
- 递交数
- 2261
- 已通过
- 1078
- 上传者