“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛

Efia ·
更新时间:2024-11-13
· 553 次阅读

A 张老师和菜哭武的游戏
题目中有描述“当且仅当集合存在y和z,满足x等于y+z或者y-z”
所以考虑y-z,很容易想到辗转相减法,所以最小项是最大公约数
然后题目就迎刃而解了

#include using namespace std; int n,a,b; int gcd(int a,int b){ if(a==b)return a; return a>b?gcd(a-b,b):gcd(b-a,a); } int main(){ int t; cin>>t; while(t--){ cin>>n>>a>>b; int temp=gcd(a,b); int ans=n/temp; if(ans%2==1) printf("Yes\n"); else printf("No\n"); } return 0; }

B 伤害计算
看了题解,觉得还是用atoi更加简单;
atoi主要用来将数字字符串转变为对应的整型数字,具体用法网上教程很多;
数学期望的计算公式是用各项权值乘以概率,常数的数学期望就是常数,公式推导还是挺简单的;
注意题目中小数只有.5,所以方便计算,可以将各项结果先乘以2,最后除2,看余数决定是否输出.5;
ps:字符串题目多用函数可以减少很多时间;

#include using namespace std; const int MAXL=6000; char strfuc[MAXL]; int ans; void opera(char *str){ char *D=strchr(str,'d'); if(D==NULL){ int c=atoi(str); ans+=2*c; //cout<<c<<endl; }else{ *D='\0'; int n=atoi(str); int x=atoi(D+1); ans+=n*(x+1); //cout<<n<<" "<<x<>strfuc){ ans=0; char* str=strfuc; while(1){ char* ps=strchr(str,'+'); if(ps==NULL){ opera(str); break; }else{ *ps='\0'; opera(str); str=ps+1; } } cout<<ans/2; if(ans%2) cout<<".5"<<endl; else cout<<endl; } return 0; } yhyxzywl 原创文章 2获赞 0访问量 104 关注 私信 展开阅读全文
作者:yhyxzywl



同济大学 讯飞 程序设计 程序 大学 科大讯飞

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章