来吧!!凭着记忆重新写了一遍
第一题 数学问题
(1+2+3+…+49)-(1+2+…+6)=1204
五分到手
第二题 不会 跳过
第三题 好数 属于签到题了 但还是折腾了好一阵
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
bool ji(int n){
if(n==1||n==3||n==5||n==7||n==9) return 1;
return 0;
}
bool o(int n){
if(n==0||n==2||n==4||n==6||n==8) return 1;
return 0;
}
int main(){
int n;
cin>>n;
int cnt=0;
for(int a=1;a<=n;a++){//依次遍历每个数
int x=a;
bool sign=0;
for(int i=1;x>0;i++){//依次遍历每一位
// cout<<"a="<<a<<endl;
// cout<<"i="<<i<<endl;
if(a/10!=0&&x<=0) break;
int c=x%10;
x/=10;
// cout<<"c="<<c<<endl;
// cout<<" ji i="<<i<<" c="<<c<<endl;
if(ji(i)&&ji(c)) {
// cout<<"a ji ="<<a<<endl;
continue;
}
// cout<<" o i="<<i<<" c="<<c<<endl;
else if(o(i)&&o(c)) {
// cout<<"a o ="<<a<<endl;
continue;
}
else {
// cout<<"a="<<a<<endl;
sign=1;
break;
}
}
if(!sign) {
cnt++;
// cout<<"a="<<a<<endl;
}
}
cout<<cnt<<endl;
return 0;
}
在评测软件试了一下 十分应该可以到手
第四题
R进制 这题应该用高精度来存
但当时debug上一道题debug的脑子晕 只想着把能拿的分先拿了
看到字符串也想到了高精度,但上次看这个模板已经是一个多月前了,就干脆没有写
还涉及一个很简单的四舍五入问题
但自己之前好像没怎么遇到过这种问题 写的很离谱
以下是我的代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
int n;
double x;
cin>>n>>x;
double k=x*pow(2,n);
string s=to_string(k);
for(int i=0;i<s.size();i++) {
if(s[i]=='.'){
if(s[i+1]==5) printf("%.0f",k+1);//完全是错的啊。。我真服了 4.5+1再取%.0f就成6了啊 简直服了我自己
else printf("%.0f",k);
}
}
return 0;
}
四舍五入的正确简略写法:
double k;
int c=k+0.5;
原理:
int类型会把浮点数类型自动向下取整,我们给f加上0.5再向下取整
如果f小数点后一位大于等于0.5,那么加上0.5后向下取整就能完成五入,否则会完成四舍
估摸着能拿2~3分吧 看运气 也可能一分都没有
第五题
宝石组合
忘记了最小公倍数的模板 lcm写了两重循环 main函数里还用了暴力枚举 套了三层循环
结果就是五层循环 这是在评测系统的结果
就是很离谱啊 知道它过不了几个 但没想到一个都过不了啊。。
这是我的代码 用结构体和sort排序 来记录最大值
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=1e5+10;
int h[N];
int gcd(int a,int b){
return b ? gcd(b,a%b) : a;
}
int lcm(int a,int b){
int m=max(a,b);
int mi=min(a,b);
if(m%mi==0) return m;
if(gcd(a,b)==1) return a*b;
else{
for(int i=1;i<mi;i++){
int t=m;
t*=i;
for(int j=2;j<m;j++){
int k=mi;
k*=j;
if(k==t) return k;
}
}
}
}
struct S{
int a,b,c,s;
bool operator < (const S & t) const{
return s<t.s;
}
}S[N];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>h[i];
}
int p=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
int a=lcm(h[i],h[j]);
int b=lcm(h[i],h[k]);
int c=lcm(h[j],h[k]);
int d=lcm(a,h[k]);
int s=h[i]*h[j]*h[k]*d/(a*b*c);
S[p].a=h[i];
S[p].b=h[j];
S[p].c=h[k];
S[p].s=s;
p++;
}
}
}
sort(S,S+n);
bool isprime=0;
for(int i=0;i<n;i++){
if(S[i+1].s==S[i].s&&S[i].s==S[n-1].s) {
cout<<S[i].a<<' '<<S[i].b<<' '<<S[i].c<<endl;
return 0;
}
}
cout<<S[n-1].a<<' '<<S[n-1].b<<' '<<S[n-1].c<<endl;
return 0;
}
但发现 貌似逻辑还有问题 因为换成正确的lcm模板之后 还是答案错误和运行错误 现在还没找出来bug
最小公倍数模板
return a*b/gcd(a,b);
该之后的测试结果
预计 没分
第五题 数字接龙 输出一个-1就跑掉了 预计2~3分
第六题 没有输出样例
第七题 随便输出了一个 1 碰运气 在测试平台上居然过了一半样例?? (我不信
希望能给我一分(求求
预计总分:20上下
在一个非常非常弱的省 预计省三应该可以到手?
备战25蓝桥杯吧!(大哭