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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法学习之路|称量硬币(模拟)

發布時間:2025/3/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法学习之路|称量硬币(模拟) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有一堆硬幣,其中有一枚是假的,可能更輕也可能更重,用天平在兩邊放上相同數量的硬幣,找出假幣。

輸入格式:第一行兩個數N,K,表示硬幣數和稱量次數。接下來2K行,第一行第一個數表示天平兩邊硬幣個數n,后2n個數為兩邊硬幣編號,第二行為>,<或=符號

輸出格式:如果不能判斷哪個硬幣是假的,輸出0,能就輸出硬幣編號。

輸入樣例:
5 3
2 1 2 3 4
<
1 1 4
=
1 2 5
=

輸出樣例:
3

解題思路:用equal數組標記沒問題的硬幣(兩邊重量相同則硬幣一定都是合格的)
用l和h數組分別標記稱量出較輕和較重的硬幣,l和h標記相等的說明硬幣出現在輕的一側和重的一側的次數相等,硬幣是合格的,否則是不合格的。

#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int n,k,equ[1050],l[1050],h[1050],flag[1050],tmp[1050]; int main() {scanf("%d%d",&n,&k);memset(equ,0,sizeof(equ));memset(l,0,sizeof(l));memset(h,0,sizeof(h));memset(tmp,0,sizeof(tmp));for (int i=1;i<=k;i++){int x;char ch;scanf("%d",&x);for(int j=0;j<2*x;j++)scanf("%d",&tmp[j]);ch=getchar();while(ch!='=' && ch!='<' && ch!='>'){ch=getchar();}if(ch=='<'){for(int j=0;j<x;j++)l[tmp[j]]=1;for(int j=x;j<2*x;j++)h[tmp[j]]=1;for(int j=1;j<=n;j++){bool flag=true;for(int k=0;k<2*x;k++)if(j==tmp[k]){flag=false;break;}if(flag)equ[j]=1;}}else if(ch=='='){for(int j=0;j<2*x;j++)equ[tmp[j]]=1;}else if(ch=='>'){for(int j=0;j<x;j++)h[tmp[j]]=1;for(int j=x;j<2*x;j++)l[tmp[j]]=1;for(int j=1;j<=n;j++){bool flag=true;for(int k=0;k<2*x;k++)if(j==tmp[k]){flag=false;break;}if(flag)equ[j]=1;}}}int ans,cnt=0;for(int i=1;i<=n;i++){if(equ[i])continue;if(l[i]&&h[i])continue;ans=i;cnt++;}if(cnt>1)printf("0\n");elseprintf("%d\n", ans);return 0; }

總結

以上是生活随笔為你收集整理的算法学习之路|称量硬币(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

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