刷题2路2线

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
官方标签:  模拟  高精度计算
提高+/省选-
题目描述
给出两个非负整数,求它们的乘积。

输入描述
输入共两行,每行一个非负整数。

输出描述
输出一个非负整数表示乘积。

输入输出样例
×💡 样例只是举一个例子,并非全部测试数据,请保证您的程序能满足任意符合题意的数据!
输入

复制

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;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值