T 電路板導通問題(C )

2021-09-03 07:42:25 字數 1536 閱讀 4049

問題描述:

有一塊布滿器件的電路板,器件共n行m列。每個器件只有兩種狀態,經一次雷射照射後狀態反轉。

初始時,器件的狀態隨機。雷射的位置在每列器件的最上方,這意味著照射一次,當前列中的所有器件的狀態全部反轉。(雷射可以多次照射同一列。)

當一行中的所有器件全為1時,本行處於導通狀態。

給定一塊電路板,並指定雷射照射次數,求最大導通行數。

限定:3≤行數n≤100,3≤列數m≤20,1≤雷射照射次數k≤m。

電路板可以使用0/1矩陣表示,0表示不導通態,1表示導通態。

輸入:n行×m列的0/1矩陣,及列反轉次數k。求經過k次列反轉後行全為1的最大行數。其中:3≤n≤100,3≤m≤20,1≤k≤m。必須反轉k次,同一列可以多次反轉。

例如,輸入是下圖所示的0/1矩陣,k=3。

1 0 0 1 0

1 1 0 0 0

0 1 1 1 0

0 0 0 1 1

1 0 1 0 1

1 1 0 0 0

輸出:2,即反轉3列,得到最多2行導通。

考慮k的奇偶性及一行中0的個數的奇偶性。最終變為排序問題。

實現**:

/*測試環境:vs2017*/

#include#includeusing namespace std;

int m,n,k;

int **a,**b,*num_0,*odd,*even,*com;

int maxcount=0,num=0;

void getdata()//依據輸入確定m和n的大小,並讀入資料

cout << "請輸入資料陣列:"<> a[i][j];

b[i][j] = a[i][j];

}}inline void trans(int **arr,int m)//列反轉

int judge(int **arr)//計算導通行數

} if(l)

count++;

} return count;

}void selectsort(int*arr,int len)

arr[i] = arr[index];

arr[index] = temp; }}

void count(int**arr)//計數每行0的個數存在num_0裡,0的個數為偶數且小於k的存於even,類似的奇數存於odd裡

for (int i = 0; i < n; i++)

selectsort(even, count0 );

selectsort(odd, count1 );

if (k % 2 == 0)

if (k % 2 == 1) }

void getresult()

cout << "最大導通數為:" << maxcount << endl;

}int main()

注:**中的排序並不是必要的,不排序也能直接實現;另一種方法是把篩選後的每一行都轉換成十進位制後再排序,找出相等的數的最大個數即為最大導通數。

電路板排列問題

一 問題描述 設b 是n塊電路板的集合。集合l 是這n塊電路板的m個連線塊。其中每個連線塊ni是b的乙個子集,且ni中的電路板用一根導線連線在一起。不同的連線快可能包含相同的電路板。設x是n塊電路板的乙個排列,則電路板的排列密度density x 定義為跨越相鄰電路板插槽的最大連線數。電路板排列問題...

新手焊接電路板 如何焊接電路板 焊電路板技巧有哪些

隨著工業化腳步的加快,很多領域都會使用電路板,說到這,不得不提到焊電路板,那焊電路板技巧有哪些呢?今天我們就通過下面的內容,一起來了解下焊電路板技巧的相關介紹。焊電路板技巧1 選擇性焊接的工藝流程包括 助焊劑噴塗,電路板預熱 浸焊和拖焊。助焊劑塗佈工藝在選擇性焊接中,助焊劑塗佈工序起著重要的作用。焊...

電路板除錯繼續

今天電路板除錯取得階段性進展,困惑了兩天的jtag和uart終於調通。原因居然是自己在焊接時有個引腳短接導致了短路。不過原理圖還是有問題的,jtag設計電源供電應該是3.3v,不知道當時自己為什麼會設計成5.0v。uart中max232 用得是1uf的電解電容,max3232用0.1uf的電容。不過...