日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

520 钻石争霸赛 题解

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 520 钻石争霸赛 题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說好的鉆石難度,結果本人菜的一地。。只有88分。。。。

文章目錄

    • 7-1 考試周
    • 7-2 真的恭喜你
    • 7-3 平均成績
    • 7-4 古風A+B
    • 難度開始上升
    • 7-5 猜近似數字
    • 7-6 隨機輸一次
    • 7-7 階乘的非零尾數
    • 7-8 三足鼎立


前四題
十分鐘AC
后兩題二十分鐘自閉
第五題玄學卡點不知為何

7-1 考試周

模擬即可,按照格式要求輸出

#include<bits/stdc++.h> using namespace std; int main() {double a,b,c;cin>>a>>b;c=a/b;printf("%.0lf/%.1f=%.0f",a,c,b); }

7-2 真的恭喜你

if比較輸出

#include<bits/stdc++.h> using namespace std; int main() {int n;cin>>n;if(n>=90)printf("gong xi ni kao le %d fen!",n);else printf("kao le %d fen bie xie qi!",n); }

7-3 平均成績

1和0分別代表男女
男女成績分別存,各自算出平均值,然后再求總平均值

#include<bits/stdc++.h> using namespace std;double sum1;double sum2;double ans1;double ans2; int main() {double n;double a,b;cin>>n;for(int i=1;i<=n;i++){cin>>a>>b;if(a==1){sum1++;ans1+=b;} else {sum2++;ans2+=b;}}if(sum1==0){printf("%.1lf X %.1lf",(ans1+ans2)/n,ans2/sum2);}else if(sum2==0){printf("%.1lf %.1lf X",(ans1+ans2)/n,ans1/sum1);}else {printf("%.1lf %.1lf %.1lf",(ans1+ans2)/n,ans1/sum1,ans2/sum2);} }

7-4 古風A+B

特判正負,因為“-”符號要特別一行,然后拆成單個存入數組,再從數組輸出

#include<bits/stdc++.h> using namespace std;double sum1;double sum2;double ans1;double ans2; int w[100]; int main() {long long a,b,c;cin>>a>>b;c=a+b;int ans=0;if(c<0){cout<<"-"<<endl; c=c*-1;}if(c==0){cout<<"0";return 0;}while(c){w[++ans]=c%10;c/=10;}for(int i=ans;i>=1;i--){cout<<w[i]<<endl; } }

難度開始上升

7-5 猜近似數字

注意兩個數如果長度不一樣直接就算錯,輸出“No”,
相同情況下,從最高位開始求差的絕對值,如果該位差的絕對值大于1,就算錯,則輸出“No”
如果有一位差的絕對值是1,則后面再出現絕對值1的情況,也算輸,
也就是所有位上最多只能有一位的差絕對值是1,數量不能多,差的決定值不能大于1
但是這個題我錯了一個點也不知道為什么?可能哪里我忽視了
我的代碼如下(包含錯誤)

#include<bits/stdc++.h> using namespace std; double b=0,g=0; double sum; int sumb,sumg; int main() {string a,b;int c[1004];cin>>a;char ch=getchar();while(cin>>b&&b!="-1"){// cout<<"--"<<" "<<b<<endl;memset(c,0,sizeof(c));ch=getchar();if(a.length()!=b.length())cout<<"No"<<endl;else {// cout<<"***"<<" "<<b<<endl;for(int i=0;i<a.length();i++){// printf("b[a]-a[]=%d\n ",abs(a[i]-b[i]) ); if(a[i]<b[i]) c[i]=b[i]-a[i];else c[i]=a[i]-b[i];// cout<<" c[i]="<<c[i]<<endl;}bool f=0;for(int i=0;i<=a.length();i++){// cout<<"i="<<i<<endl; if(c[i]>1){cout<<"No"<<endl;f=0;break;}else if(c[i]==1&&f==0){f=1;}else if(c[i]==1&&f==1){cout<<"No"<<endl;f=0;break;}}if(f==1)cout<<"Yes"<<endl;}}}

正確代碼:(學校的大佬)

#include<bits/stdc++.h>using namespace std; string a,b; int n; bool boolean(){int l=a.size();bool f=0; for(int i=0;i<l;i++){ if(abs(a[i]-b[i])==0){ continue; } else if(abs(a[i]-b[i])==1&&f==0){ f=1; }else return 0; }return 1; }int main(){ cin>>a; while(1){ cin>>b; if(b=="-1") break; if(b.size()!=a.size()){ printf("No\n"); continue; }if(boolean()) printf("Yes\n"); else printf("No\n"); }return 0; }

7-6 隨機輸一次

尖子石頭步的拼音第一位都不一樣,所以光比第一位就可以
注意k中是每個多少局輸一次,而非是第多少局輸一次

**#include<bits/stdc++.h> using namespace std; int k[10006]; int main() {int n;cin>>n;for(int i=1;i<=n;i++)cin>>k[i];char ch;ch=getchar();char s[13];int ans=1;int sum=0;bool f=0; while(~scanf("%s",s)){sum++;if(ans>n)ans%=n;if(k[ans]+1==sum){f=1;ans++;sum=0;// cout<<"-----"<<endl;}else f=0;if(s[0]=='E')break;if(s[0]=='C'){if(f==1)cout<<"JianDao"<<endl;else cout<<"Bu"<<endl;}else if(s[0]=='J'){if(f==1)cout<<"Bu"<<endl;else cout<<"ChuiZi"<<endl;}else if(s[0]=='B'){if(f==1)cout<<"ChuiZi"<<endl;else cout<<"JianDao"<<endl;}ch=getchar();}return 0; }**

以下兩題代碼均來自我學校的大佬學長

7-7 階乘的非零尾數

之前見過一個求最后一個非零尾數
數論問題,首先考慮末尾產生0的情況,只有當相乘的數的因子中出現2和5時會出現0,也就是0的數量取決于出現多少對2和5。
2和5都有時就出現一個0,所以求min(5,2)
因為在階乘中5的數量是少于2的,所以只需要討論因子中有多少個5就行,對于求后k位非零數,因為對于一個整數的后k位很簡單,都會求,所以只需要在計算階乘的過程中將對應數量的
2和5除去即可
比如求5!=12345=120的后兩位非零數,就是在計算時將2和5去除計算341,然后mod 100即可

#include<bits/stdc++.h>using namespace std; typedef long long ll; int num1,num2; int n,k; int main(){ cin>>n>>k; int n1=n;while(n1){num1+=n1/5; //計算n1中因數5的個數 n1=n1/5; //}int num=num1;num2=num1;ll mod=pow(10,k);//求非零k位數 ll sum=1;for(int i=1;i<=n;i++){ int w=i;while(w%2==0&&num1){w/=2;num1--; }while(w%5==0&&num2){ w/=5;num2--; }sum=(sum%mod*w%mod)%mod; }string c="%0"; c=c+(char)(k+'0')+"lld"; printf(c.data(),sum); printf(" %d",num);return 0; }

7-8 三足鼎立

之前做過一個類似的,是求能組成多少個三角形
暴力,肯定是不對滴,超時嘛
因為是構成三角形,也就是任何兩邊之差一定小于第三邊
其中一個邊已經給了

我們可以先排序,這樣具備單調性,
枚舉一個邊,然后通過二分來確定第三個邊的范圍,在這范圍內的是符合單個條件,然后反過來操作(確定第三個邊,然后二分第二個邊),重復部分就符合全部要求
所以最后結果除以二

#include<bits/stdc++.h>using namespace std; typedef long long ll; int num1,num2; int n,k; const int maxn=1e6+4; int a[maxn]; int main(){ int n,p;cin>>n>>p;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);ll sum=0;for(int i=0;i<n;i++){int high=lower_bound(a,a+n,a[i]+p)-a;int low=upper_bound(a,a+n.abs(a[i]-p))-a;int num=high-low;if(i>=low&&i<=high){num--;sum++num;}}cout<<sum/2<<endl; }

總結

以上是生活随笔為你收集整理的520 钻石争霸赛 题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。