上午测试讲题
- 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;
}
- U176942 等比数列/sequence2
分析:已知 \(a_1,a_3\),可以求出公比 \(q=\sqrt{ \frac{a_3}{a_1 }}\),进而构造等比数列即可。
点击查看代码
#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;
}
- P1055 [NOIP2008 普及组] ISBN 号码
分析:先按照isbn的要求求出校验码 sum,再比对即可。
点击查看代码
#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;
}
- P1179 [NOIP2010 普及组] 数字统计
分析:一个很重要的标记思想, st[i] 表示有关 i 的信息,如本题:st[i] 表示 i 出现次数
点击查看代码
#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
标签:main,lb,la,int,笔记,8.15,using,include,集训 From: https://www.cnblogs.com/hellohebin/p/17631111.html