8.15集训笔记

发布时间 2023-08-15 13:55:56作者: HelloHeBin

上午测试讲题

  • U259234 累加累乘/accmul
    分析:直接开两个变量记录答案即可,使用for循环n次,对于s1也可以使用等差数列求和公式。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n;

int main(){
    cin>>n;
    int s1=0, s2=1;
    for(int i=1; i<=n; i++){
        s1 += i;
        s2 *= i;
    }
//    s1 = (1+n) * n / 2;
    cout<<s1<<endl<<s2<<endl;
    return 0;
}
  • U297238 高位求和/summation
    分析:要高位对齐,那么如何对齐?可以想到直接给小的数后面补0,当a,b位数相等再直接计算a+b即可
点击查看代码
#include<bits/stdc++.h>  // 万能头
using namespace std;
int n;
int main(){
    int a,b; cin>>a>>b;
    int la=0,lb=0;
    int ta=a, tb=b;
    while(ta) { la ++; ta/=10; }
    while(tb) { lb ++; tb/=10; }
    if(la < lb) a *= pow(10, lb-la);
    if(la > lb) b *= pow(10, la-lb);
    cout<<a+b;
    return 0;
}
  • U176941 等差数列/sequence1
    分析:先求出公差 d,再判断是否差都为 d;如果是等差数列,需要注意 \(n\sum{a_i}\) 爆 int.
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n, a[N];

int main(){
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
     // flag=1 是等差数列, 0不是等差数列
    int d = a[1], flag=1;
    if(n>2) d = a[2]-a[1];
    for(int i=2; i<=n; i++){
        if(a[i]-a[i-1]!=d) {
            flag=0; break;
        }
    }
    if(flag) cout<<1ll *(a[1] + a[n]) * n/2;// 注意爆 int
    else cout<<0;
    return 0;
}
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int f[N], ans;

int main(){
    int a,b,n,i,j;
    cin>>a>>b>>n>>i>>j;
    int q = sqrt(b/a);
    f[1]=a;
    for(int k=2; k<=n; k++) f[k]=f[k-1] * q; // 构造等比数列
    for(int k=i; k<=j; k++){
        cout<<f[k]<<" ";
        ans += f[k];
    }
    cout<<endl<<ans;
    return 0;
}
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
char s[N];

int main(){
    cin>>s;
    int n = strlen(s), sum=0, p=1;
    for(int i=0; i<n-1; i++)
        if(isdigit(s[i])){
            sum += (s[i]-'0') * p; p++;
        }
    sum %= 11;
    int c = s[n-1]-'0';
    if(sum < 10 && c==sum || sum==10 && s[n-1]=='X') cout<<"Right";
    else {
        if(sum<10) s[n-1] = sum +'0';
        else s[n-1] = 'X';
        cout<<s;
    }
    return 0;
}
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,x,st[10];

int main(){
    cin>>n>>x;
    for(int i=1; i<=n; i++){
        int t=i;
        while(t) st[t%10] ++, t/=10;
    }
    cout<<st[x];
    return 0;
}

下午一维数组

https://www.cnblogs.com/hellohebin/p/15170336.html