YACS-202109
YACS-202109
做烧饼
http://iai.sh.cn/problem/484
#include<bits/stdc++.h> using namespace std; int n,k; int main(){ cin>>n>>k; if(n<k)//如果n<2*k 则需要先烤一面,再烤另外一 cout<<2; else{ cout<<ceil(2*n*1.0/k); } }
正规数的判定
http://iai.sh.cn/problem/485
#include<bits/stdc++.h> using namespace std; long long n,k; bool isPrime(long long n){ bool flag=true; for(int i=2;i*i<=n;i++){ if(n%i==0){ flag=false; break; } } return flag; } int main(){ cin>>n; int prim=2; while(n>0 && prim<n){//质数必须在n的范围内 if(prim>5){//超出5 是不规则数 cout<<"Irregular Number"; return 0; } if(!isPrime(prim)){//不是质数 加1 继续找下一个质数 prim++; continue; } if(n%prim==0){//是质数的倍数 分解出去此质数 n/=prim; }else{//不是此质数倍数,prim++找下一个质数 prim++; } } cout<<"Regular Number";//没找到不规则数,则是规则数 return 0; }
股票市场
http://iai.sh.cn/problem/486
#include<bits/stdc++.h> using namespace std; int n,m,stockCnt;//stockCnt买的股票数量 int a[100005]; int main(){ cin>>n>>m; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<n-1;i++){ if(a[i]<=a[i+1]){//买 stockCnt = stockCnt + m/a[i];//买股票数 m=m%a[i];//剩余钱 }else if(a[i]>a[i+1]){//卖 m+=stockCnt*a[i]; stockCnt=0; } } if(stockCnt>0){//有股票 说明最后一个比前一个大 m+=stockCnt*a[n-1]; } cout<<m; }
最年长的人
http://iai.sh.cn/problem/487
//scanf("%d/%d/%d" #include<bits/stdc++.h> using namespace std; struct ymd{ int year; int month; int day; }; bool cmp(ymd ymd1,ymd ymd2){ if(ymd1.year!=ymd2.year){ return ymd1.year<ymd2.year; } if(ymd1.month!=ymd2.month){ return ymd1.month<ymd2.month; } return ymd1.day<ymd2.day; } int n; int year,month,day; ymd ymds[1000005]; int main(){ cin>>n; for(int i=0;i<n;i++){ scanf("%d-%d-%d",&year,&month,&day); // cout<<year<<" "<<month<<" "<<day<<endl; ymds[i].year=year; ymds[i].month=month; ymds[i].day=day; } sort(ymds,ymds+n,cmp); cout<<ymds[0].year<<"-"; if(ymds[0].month<10){ cout<<"0"; } cout<<ymds[0].month<<"-"; if(ymds[0].day<10){ cout<<"0"; } cout<<ymds[0].day; }
分数化小数
http://iai.sh.cn/problem/493
#include<bits/stdc++.h> using namespace std; int a,b; int arr[1000005],idx=0; int bk[2000005];//桶 记录每次分子对应arr小数后下标 方便循环节输出左括号 int main(){ cin>>a>>b; bk[a]=idx+1;//bk从1开始,区分是否已经没有放入的 int stIndex=0; while(a!=b){//无循环节 分子分母相等即分数为1时 转二进制结束 退出循环 a=a*2; if(a>=b){ arr[++idx]=1; if(a!=b)//a==b 的话 通过while循环退出 这里不处理反否则会出现死循环 a-=b; }else{ arr[++idx]=0; } if(bk[a]>0){//出现重复 有循环节 退出循环 (分子*2对应的数只出现一次) stIndex=bk[a];//记录开始位置 break; }else{ bk[a]=idx+1; } } cout<<"0."; // 存放小数后的二进制数字从1开始 第一个整数部分为0 for(int i=1;i<=idx;i++){ if(stIndex==i){// bk下标对应值 从1开始 小数部分从1开始 判断左括号位置 cout<<"("; } cout<<arr[i]; } if(stIndex>0){ cout<<")"; } } // 1/2=0.1 1/4=0.01 // 1/3=0.(01) 1/5=0.(0011) 1/6=0.0(01)
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号