1. 程式人生 > >晶片測試(藍橋基礎練習)詳解

晶片測試(藍橋基礎練習)詳解

問題描述   有n(2≤n≤20)塊晶片,有好有壞,已知好晶片比壞晶片多。
  每個晶片都能用來測試其他晶片。用好晶片測試其他晶片時,能正確給出被測試晶片是好還是壞。而用壞晶片測試其他晶片時,會隨機給出好或是壞的測試結果(即此結果與被測試晶片實際的好壞無關)。
  給出所有晶片的測試結果,問哪些晶片是好晶片。 輸入格式   輸入資料第一行為一個整數n,表示晶片個數。
  第二行到第n+1行為n*n的一張表,每行n個數據。表中的每個資料為0或1,在這n行中的第i行第j列(1≤i, j≤n)的資料表示用第i塊晶片測試第j塊晶片時得到的測試結果,1表示好,0表示壞,i=j時一律為1(並不表示該晶片對本身的測試結果。晶片不能對本身進行測試)。 輸出格式   按從小到大的順序輸出所有好晶片的編號 樣例輸入 3
1 0 1
0 1 0
1 0 1 樣例輸出

1 3

在閱讀這道題目的時候,題目能讀懂,但是沒能一下就想出答案哭(膜拜大神),想了片刻後,看出了題目給定的矩陣是對稱矩陣,於是就想著,是否在判斷這個題目對稱位置都為1的時候就表明這個晶片是好的呢,於是就開始寫了程式,程式碼如下:

#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
int n,count=0;
cin>>n;
int *p=new int [n*n];
int *good=new int [n];
for(int i=0;i<n*n;i++)
cin>>*(p+i);
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++){
if(i!=j){
if(*(p+i*n+j)==1 && *(p+i*n+j)==*(p+j*n+i)){
*(good+count++)=i+1;
*(good+count++)=j+1;
}
}
}
sort(good,good+count);
cout<<*(good);
for(int i=1;i<count;i++){
if(*(good+i)!=*(good+i-1)){
cout<<" "<<*(good+i);
}
}
cout<<endl;

return 0;
 } 

提交上去後,60分,程式執行錯誤,啊,5個樣例過了3個,看來自己還是太菜了

哎,不對,怎麼提示執行錯誤呀?這是在逗我嗎

咦,看了很久,原來是我定義的good陣列越界了,好吧,那我改大一點吧,再次提交,還是60分,尷尬

--------------------------------------------------- 胡扯分割線

額,好吧,看來我還得重新整理下思路了,尷尬了,心情還是不美麗

然後我又看起了陣列,對比答案,是不是有什麼規律咋的(廣告:自我感覺對數字挺敏感的)

哇喔,還真有規律,原來答案就在矩陣的最後一行呀-----最後一行的數值是1的,說明這是好的晶片,好吧,先提交試下深淺

--------------------------------完美100分

程式碼如下:

#include <iostream>   
using namespace std;    
int main()  
{  
    int n;   
cin>>n;
int *p=new int [n*n];
for(int i=0;i<n*n;i++)
cin>>*(p+i);
for(int j=0;j<n-1;j++){
if(*(p+(n-1)*n+j)) cout<<j+1<<" ";
}
cout<<n;
    return 0;  
}  

---------------------------------------------------正經起來

不對,這肯定不是這道題目想要考察的,不管是理解能力方面還是知識點方面,都不在這道題目的考察範圍吧,我猜想(哈哈哈,先自戀一下,這道題可能是因為出題不夠嚴謹,出bug了,攤手狀)

然後我又去找了下網上前輩大神們的答案,喲西,還真是不一樣的嘛!!!

是應該好好的理解下題目了,好的晶片測試別的晶片就是正確的結果,壞的就是隨機的結果,,然後,題目中又說,第i,j位置的含義為i晶片測試j晶片的結果,那麼,第j列就是其他晶片測試j的結果,題目中說好的好晶片的數量大於壞晶片的數量,那麼我們就統計j列的數字1多點還是0多點,就可以判斷晶片的好壞了(哎呀,終於寫完了,累個半死,還不快快點贊分享)

程式碼如下:

#include <iostream>
#include <algorithm>
using namespace std;
int main ()
{
int n,count=0;
cin>>n;
int *p=new int [n*n];
for(int i=0;i<n*n;i++)
cin>>*(p+i);
/*for(int j=0;j<n-1;j++){
if(*(p+(n-1)*n+j)) cout<<j+1<<" ";
}
cout<<n;*/
bool f=false;
for(int i=0;i<n;i++){
count=0;
for(int j=0;j<n;j++){
if(i!=j) count+=*(p+j*n+i);
}
if(count>=n/2 && !f){
cout<<i+1;
f=true;

else if(count>=n/2) cout<<" "<<i+1;
}
cout<<endl;

return 0;
 } 

相關推薦

晶片測試藍橋基礎練習

問題描述   有n(2≤n≤20)塊晶片,有好有壞,已知好晶片比壞晶片多。   每個晶片都能用來測試其他晶片。用好晶片測試其他晶片時,能正確給出被測試晶片是好還是壞。而用壞晶片測試其他晶片時,會隨機給出好或是壞的測試結果(即此結果與被測試晶片實際的好壞無關)。   給出

ORACLE基礎之oracle鎖oracle lock mode

ORACLE裡鎖有以下幾種模式: 0:none 1:null 空 2:Row-S 行共享(RS):共享表鎖,sub share 3:Row-X 行獨佔(RX):用於行的修改,sub exclusive 4:Share 共享鎖(S

JAVA基礎程式設計50題19-21題

一、描述 題目1:   打印出如下菱形圖案(菱形)     *    ***    *****   *******    *****     ***      *  程式分析:先把圖形分成兩部分來看待,前四行一個規律,後三行一個規律,利用雙重 for迴圈,外層控制行,內層控

手動安裝cloudera manager 5.xtar包方式

text res 三種 href none bin -i min devel 官方共給出了3中安裝方式:第一種方法必須要求所有機器都能連網,由於最近各種國外的網站被墻的厲害,我嘗試了幾次各種超時錯誤,巨耽誤時間不說,一旦失敗,重裝非常痛苦。第二種方法下載很多包。第三種方法對

PCA 主成分分析 寫給初學者 結合matlab轉載

整數 變量 行為 保持 sum osc 入參 函數 data 一、簡介 PCA(Principal Components Analysis)即主成分分析,是圖像處理中經常用到的降維方法,大家知道,我們在處理有關數字圖像處理方面的問題時,比如經常用的圖像的查詢

(轉)View Transform視圖變換

camera 1.0 posit 朝向 復制 3d圖 過程 product 變量 原文作者講得太好了,唯有這篇讓我對視圖矩陣了解的清晰了很多。 ----------------------------------------------------------------

BlockingQueue阻塞隊列

明顯 緩存 thread 生產者消費者 演示 mce 生成 log spa 註意:該隨筆內容完全引自http://wsmajunfeng.iteye.com/blog/1629354,寫的很好,非常感謝,復制過來算是個積累,怕以後找不到。 一. 前言   在新增的Concu

Kotlin——最詳細的抽象類abstract、內部類嵌套類

unit 建議 git 功能 pen 情況 master 這也 html 在前面幾個章節中,詳細的介紹了Kotlin類的類別中的數據類、密封類、接口類以及枚舉類。在這個章節中會對Koltin的抽象類和內部類作出一個詳細的講解。如果對上面所提到的類的類別還不是很清晰的,請閱

非旋 treap 結構體數組版無指針,有圖有真相

ati sin closed 基準 隨機函數 例題 偽隨機 作用 拆分 非旋 $treap$ (FHQ treap)的簡單入門 前置技能 建議在掌握普通 treap 以及 左偏堆(也就是可並堆)食用本blog 原理 以隨機數維護平衡,使樹高期望為logn級別

_030_Android_ Android開發之SmsManager簡訊管理器

轉自https://blog.csdn.net/qq_37443229/article/details/80039836,感謝作者的無私分享。 Android開發之SmsManager(簡訊管理器)詳解         SmsManager是

VTPVLAN Trunking Protocol

Notes: VTP 不生成 trunk 介面,但是需要 trunk links 來發送同步資訊 VTP 只同步 switch 中的 vlan database,不同步連線該 vlan 下的PC端介面資訊,需要手動配置 VTP 配置儲存在 vlan.dat 中

字典學習Dictionary Learning, KSVD

注:字典學習也是一種資料降維的方法,這裡我用到SVD的知識,對SVD不太理解的地方,可以看看這篇部落格:《SVD(奇異值分解)小結 》。 1、字典學習思想 字典學習的思想應該源來實際生活中的字典的概念。字典是前輩們學習總結的精華,當我們需要學習新的知識的時候,不必與先輩們一樣去學習先輩們所有學習

Linux Shell 字串操作長度/查詢/替換

在做shell批處理程式時候,經常會涉及到字串相關操作。有很多命令語句,如:awk、sed都可以做字串各種操作。 其實shell內建一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程式等時間,因此速度會非常的快。 一、判斷讀取字串值

Matlab人臉檢測方法Face Parts Detection

  今天同學讓我幫忙製作一個人臉表情識別的樣本庫,其中主要是對人臉進行裁剪,這裡用到了一個相對較新的Matlab人臉檢測方法Face Parts Detection,網上百度了一下發現關於Matlab人臉檢測的程式碼和資源並不多,故此專門撰寫一篇部落格來詳細介紹這個人臉檢測方

MyBatis Generator 自動生成工具

MyBatis Generator中文文件地址: 該中文文件由於儘可能和原文內容一致,所以有些地方如果不熟悉,看中文版的文件的也會有一定的障礙,所以本章根據該中文文件以及實際應用,使用通俗的語言來講解詳細的配置。 本文中所有節點的連結都是對

Android 跨程序雙向通訊Messenger與AIDL

今天這篇文章主要講一下Messenger與AIDL的區別、優缺點以及各自的使用方法。 Messenger與AIDL的異同 一、Messenger與AIDL相同點 1.都與IPC的呼叫有關; 2.Messenger 是一種輕量級的

Android控制元件之SlidingDrawer滑動式抽屜與例項

SlidingDrawer效果想必大家也見到過,它就是1.5模擬器上進入應用程式列表的效果。下面是截圖  一、簡介    SlidingDrawer隱藏屏外的內容,並允許使用者通過handle以顯示隱藏內容。它可以垂直或水平滑動,它有倆個View組成,其

雙硬碟(SSD+HDD)安裝雙系統win10+ubuntu18.04

           電腦配置不是很好,換電腦還沒到那個經濟水平,只能加記憶體條加固態硬碟。於是,目前電腦有三星(SSD 128G)和希捷(HDD 500G)。現在因為學習的需要,選擇了雙系統:Ubuntu18.04+win10。之前在一塊硬碟上安裝過雙系統,於是在安裝完wi

DNS域名解析協議

DNS協議 我們之前已經瞭解過ARP協議。 如果說ARP協議是用來將IP地址轉換為MAC地址,那麼DNS協議則是用來將域名轉換為IP地址(也可以將IP地址轉換為相應的域名地址)。 我們都知道,TCP/IP中使用的是IP地址和埠號來確定網路上某一臺主機上的

CFICommon Flash Interface

【什麼是CFI】 CFI(Common Flash Interface),是JEDEC(Joint Electron Device Engineering Council,電子器件工程聯合委員會)制定的一個介面, 用來幫助程式讀取Flash的製造商ID和裝置ID,確定Fl