5. 【入门】级数求和 [ 提交记录 ] [ 问题 1060 ]
结果评判: 文本对比
正确/提交: 28 / 40
官方标签: 循环结构
入门
题目描述
已知:Sn=1+1/2+1/3+…+1/n。显然对于任意一个整数k,当n足够大的时候,Sn大于k。现给出一个整数k(1<=k<=12),要求计算出一个最小的n,使得Sn>k。
输入描述
一个整数k。
输出描述
一个整数n。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
1
输出
复制
2
#include<bits/stdc++.h>
using namespace std;
int main(){
double n;
cin>>n;
double cnt=0;
if(n==1){
cout<<2;
return 0;
}
for(double i=1;i<=100000;i++){
cnt+=1*1.0/i;
if(cnt>n){
cout<<i;
break;
}
}
}
6. 【基础】进制转换 [ 作业 课下复习 ] [ ]
结果评判: 文本对比
正确/提交: 45 / 89
官方标签: 递归
入门
题目描述
上机练习6.3.6 用递归算法将一个十进制数X转换成任意进制数M(M<=16)。
输入描述
一行,整数X和M,X<=109,M<=16。
输出描述
十进制数X的M进制数。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
11 2
输出
复制
1011
6. 【基础】进制转换 dec2x [ ] [ 1118 ]
结果评判: 文本对比
正确/提交: 45 / 89
官方标签: 递归
入门
题目描述
上机练习6.3.6 用递归算法将一个十进制数X转换成任意进制数M(M<=16)。
输入描述
一行,整数X和M,X<=109,M<=16。
输出描述
十进制数X的M进制数。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
11 2
输出
复制
1011
#include<bits/stdc++.h>
using namespace std;
string s;
void dec2m(int a,int pj){
int yu=0,sh=0;
int i=0;
while(a!=0){
yu=a%pj;
a/=pj;
if(yu<10)
s[i]=(char)(yu+'0');
else{
s[i]=(char)(45+yu);
}
i++;
}
for(int j=i-1;j>=0;j--){
cout<<(char)(s[j]);
}
}
int main(){
int a,m;
cin>>a>>m;
dec2m(a,m);
}6. 计算矩阵边缘元素之和 [ 提交记录 ] [ 问题 1095 ]
结果评判: 文本对比
正确/提交: 47 / 126
官方标签: 数组 二维数组
入门
题目描述
输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
输入描述
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。
接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。
输出描述
输出对应矩阵的边缘元素和。(答案有可能会超出int范围)
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
3 3
3 4 1
3 7 1
2 0 1
输出
15
#include<bits/stdc++.h>
using namespace std;
int main(){
int cm,cn;
cin>>cm>>cn;
const int m=cm,n=cn;
int a[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
long long cnt=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0||i==m-1||j==0||j==n-1){
cnt+=a[i][j];
}
}
}
cout<<cnt;
}3. 向量点积计算 [ ] [ ]
结果评判: 文本对比
正确/提交: 46 / 59
官方标签: 数组 一维数组
入门
题目描述
在线性代数、计算几何中,向量点积是一种十分重要的运算。给定两个n维向量a=(a1,a2,...,an)和b=(b1,b2,...,bn),求点积a⋅b=a1b1+a2b2+...+anbn。
输入描述
第一行是一个整数n(1≤n≤1000);
第二行包含n个整数a1,a2,...,an;
第三行包含n个整数b1,b2,...,bn;
相邻整数之间用单个空格隔开。每个整数的绝对值都不超过1000。
输出描述
一个整数,即两个向量的点积结果。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
3
1 4 6
2 1 5
输出
复制
36
#include<bits/stdc++.h>
using namespace std;
int main(){
long long cnt=0;
int cinm;
cin>>cinm;
const int m=cinm;
int a[m];
int b[m];
for(int i=0;i<m;i++){
cin>>a[i];
}
for(int i=0;i<m;i++){
cin>>b[i];
}
for(int i=0;i<m;i++){
cnt+=a[i]*b[i];
}
cout<<cnt;
}
1352. A*B Problem [ 提交记录 ]
结果评判: 文本对比
正确/提交: 12 / 28
官方标签: 模拟 高精度计算
提高+/省选-
题目描述
给出两个非负整数,求它们的乘积。
输入描述
输入共两行,每行一个非负整数。
输出描述
输出一个非负整数表示乘积。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
1
2
输出
复制
2
提示
每个非负整数不超过 102000
。
语言:
C++14
主题:
CyberPunk模式
字体大小:
小
00
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int a[1010000],b[1010000],c[1010000];
int main(){
string s1,s2;
cin>>s1>>s2;
int lena=s1.size(),lenb=s2.size();
for(int i=0;i<lena;i++){
a[i]=s1[lena-1-i]-'0';
}
for(int i=0;i<lenb;i++){
b[i]=s2[lenb-1-i]-'0';
}
for(int i=0;i<lena;i++){
for(int j=0;j<lenb;j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
int l=lena+lenb;
while(c[l-1]==0&&l>1){
l--;
}
for(int i=l-1;i>=0;i--)
cout<<c[i];
return 0;
}
2024-02-06 21:50:26
1153. Fibonacci [ 提交记录 ]
结果评判: 文本对比
正确/提交: 2 / 20
官方标签: 动态规划
普及-
题目描述
The Fibonacci Numbers{0,1,1,2,3,5,8,13,21,34,55...} are defined by the recurrence:
F0=0 F1=1 Fn=Fn-1+Fn-2,n>=2
Write a program to calculate the Fibonacci Numbers.
输入描述
Each case contains a number n and you are expected to calculate Fn.(0<=n<=30) 。
输出描述
For each case, print a number Fn on a separate line,which means the nth Fibonacci Number.
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
1
3
5
9
输出
复制
1
2
5
34
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[30+1]{0,1};
for(int i=2;i<=30;i++){
a[i]=a[i-1]+a[i-2];
}
int n;
while(cin>>n){
cout<<a[n]<<endl;
};
return 0;
}
26. 记数问题 [ 提交记录 ] [ 问题 1221 ]
结果评判: 文本对比
正确/提交: 20 / 41
官方标签: NOIP2013
普及-
题目描述
试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10、11中,数字1出现了4次。
输入描述
每组输入数据共1行,包含2个整数n、x,之间用一个空格隔开。
数据规模:
对于100%的数据,1≤n≤1,000,000,0≤x≤9。
输出描述
每组输出共1行,包含一个整数,表示x出现的次数。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
11 1
输出
复制
4
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,num;
cin>>n>>num;
int cnt=0;
for(int i=1;i<=9;i++){
if(i>n)break ;
if(i/1%10==num){
cnt++;
}
}
for(int i=10;i<=99;i++){
if(i>n)break ;
if(i/1%10==num){
cnt++;
}
if(i/10%10==num){
cnt++;
}
}
for(int i=100;i<=999;i++){
if(i>n)break ;
if(i/1%10==num){
cnt++;
}
if(i/10%10==num){
cnt++;
}
if(i/100%10==num){
cnt++;
}
}
for(int i=1000;i<=9999;i++){
if(i>n)break ;
if(i/1%10==num){
cnt++;
}
if(i/10%10==num){
cnt++;
}
if(i/100%10==num){
cnt++;
}
if(i/1000%10==num){
cnt++;
}
}
for(int i=10000;i<=99999;i++){
if(i>n)break ;
if(i/1%10==num){
cnt++;
}
if(i/10%10==num){
cnt++;
}
if(i/100%10==num){
cnt++;
}
if(i/1000%10==num){
cnt++;
}
if(i/10000%10==num){
cnt++;
}
}
for(int i=100000;i<=999999;i++){
if(i>n)break ;
if(i/1%10==num){
cnt++;
}
if(i/10%10==num){
cnt++;
}
if(i/100%10==num){
cnt++;
}
if(i/1000%10==num){
cnt++;
}
if(i/10000%10==num){
cnt++;
}
if(i/100000%10==num){
cnt++;
}
}
if(num==0&&n==1000000){
cnt+=6;
}
if(num==1&&n==1000000){
cnt++;
}
cout<<cnt;
return 0;
}
简单版
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,num,cnt=0;
cin>>n>>num;
for(int i=1;i<=9;i++){
if(i>n)break ;
if(i/1%10==num)cnt++;
}
for(int i=10;i<=99;i++){
if(i>n)break ;
if(i/1%10==num)cnt++;
if(i/10%10==num)cnt++;
}
for(int i=100;i<=999;i++){
if(i>n)break ;
if(i/1%10==num)cnt++;
if(i/10%10==num)cnt++;
if(i/100%10==num)cnt++;
}
for(int i=1000;i<=9999;i++){
if(i>n)break ;
if(i/1%10==num)cnt++;
if(i/10%10==num)cnt++;
if(i/100%10==num)cnt++;
if(i/1000%10==num)cnt++;
}
for(int i=10000;i<=99999;i++){
if(i>n)break ;
if(i/1%10==num)cnt++;
if(i/10%10==num)cnt++;
if(i/100%10==num)cnt++;
if(i/1000%10==num)cnt++;
if(i/10000%10==num)cnt++;
}
for(int i=100000;i<=999999;i++){
if(i>n)break ;
if(i/1%10==num)cnt++;
if(i/10%10==num)cnt++;
if(i/100%10==num)cnt++;
if(i/1000%10==num)cnt++;
if(i/10000%10==num)cnt++;
if(i/100000%10==num)cnt++;
}
if(num==0&&n==1000000)cnt+=6;
if(num==1&&n==1000000)cnt++;
cout<<cnt;
return 0;
}
PI小数点后15位
#include<bits/stdc++.h>
#include<bits/c++config.h>
using namespace std;
int main(){
double p;
p=12.0*atan2(1.0,4.0)+4*atan2(1.0,20.0)+4*atan2(1.0,1985.0);
cout<<fixed<<setprecision(15)<<p;
return 0;
}
e自然对数
#include<bits/stdc++.h>
#include<bits/c++config.h>
long long js(short a){
long long mul=1;
for(int i=1;i<=a;i++){
mul*=i;
}
return mul;
}
using namespace std;
int main(){
double sum=0;
for(int i=1;i<=20;i++){
sum+=1.0*1.0/js(i);
}
cout<<sum+1/1;
return 0;
}
语法综合题单(必做)
2024-02-18
20:02 2024/2/18
46. 优秀的拆分 [ ] [ ]
结果评判: 文本对比
正确/提交: 16 / 49
官方标签: 模拟 CSP-J2020
普及-
题目描述
一般来说,一个正整数可以拆分成若干个正整数的和。
例如,1=1
,10=1+2+3+4
等。对于正整数 n
的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n
被分解为了若干个不同的 2
的正整数次幂。注意,一个数 x
能被表示成 2
的正整数次幂,当且仅当 x
能通过正整数个 2
相乘在一起得到。
例如,10=8+2=2^3+2^1
是一个优秀的拆分。但是,7=4+2+1=2^2+2^1+2^0
就不是一个优秀的拆分,因为 1
不是 2
的正整数次幂。
现在,给定正整数 n
,你需要判断这个数的所有拆分中,是否存在优秀的拆分。若存在,请你给出具体的拆分方案。
输入描述
输入只有一行,一个整数 n
,代表需要判断的数。
输出描述
如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。
若不存在优秀的拆分,输出 `-1`。
输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入
复制
6
输出
复制
4 2
输入
复制
7
输出
复制
-1
提示
样例 1 解释
6=4+2=2^2+2^1
是一个优秀的拆分。注意,6=2+2+2
不是一个优秀的拆分,因为拆分成的 3
个数不满足每个数互不相同。
数据规模与约定
- 对于 20%
的数据,n≤10
。
- 对于另外 20%
的数据,保证 n
为奇数。
- 对于另外 20%
的数据,保证 n
为 2
的正整数次幂。
- 对于 80%
的数据,n≤1024
。
- 对于 100%
的数据,1≤n≤107
。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n%2==0){
for(int i=1073741824;i>1;i/=2){
if(i>n){
continue;
}
if((n-i)>=0){
cout<<i<<' ';
n-=i;
}
}
}
else{
cout<<-1;
}
return 0;
}