給定n,m,min和max,求所有的,滿足0<=i<=n,0<=j<=m並且min<=i*j<=max。
要求:不得使用暴力法,演算法複雜度要求o(n,m)
1.設有k和l,若滿足k*l是不滿足條件的;若k*l>max,對於i>=k且j>=l,則是不滿足條件的。
2.可以考慮用三分法。
3.需要考慮n和m比較小的情形,例如0,1,2,也許需要做特殊的處理。
樣例資料如下:
輸入:n,m,min和max分別為10,10,31,41
結果:<4 8>
<4 9>
<4 10>
<5 7>
<5 8>
<6 6>
<7 5>
<8 4>
<8 5>
<9 4>
<10 4>
暴力法程式如下:
/* b00015 平方矩陣問題(暴力法) */
#include using namespace std;
int main()
return 0;
}
執行結果(輸入與輸出):
10 10 31 41
<4 8>
<4 9>
<4 10>
<5 7>
<5 8>
<6 6>
<7 5>
<8 4>
<8 5>
<9 4>
<10 4>
根據網友提供的程式改進後的程式:
/* b00015 平方矩陣問題(二分法) */
#include #include using namespace std;
int b_search_max(int row, int left, int right , int maxs)
}return right;
}int b_search_min(int row, int left, int right , int mins)
}return left;
}int main()
return 0;
}
執行結果(輸入與輸出)之一:
10 10 31 41
<4 8>
<4 9>
<4 10>
<5 7>
<5 8>
<6 6>
<7 5>
<8 4>
<8 5>
<9 4>
<10 4>
執行結果(輸入與輸出)之二:
15 15 31 41
<3 11>
<3 12>
<3 13>
<4 8>
<4 9>
<4 10>
<5 7>
<5 8>
<6 6>
<7 5>
<8 4>
<8 5>
<9 4>
<10 4>
<11 3>
<12 3>
<13 3>
進一步改進後的程式:
/* b00015 平方矩陣問題(綜合二分法) */
#include #include using namespace std;
int b_search_max(int row, int left, int right , int maxs)
}return right;
}int b_search_min(int row, int left, int right , int mins)
}return left;
}int main()
return 0;
}
執行結果(輸入與輸出)之一:
10 10 31 41
<4 8>
<4 9>
<4 10>
<5 7>
<5 8>
<6 6>
<7 5>
<8 4>
<8 5>
<9 4>
<10 4>
執行結果(輸入與輸出)之二:
15 15 31 41
<3 11>
<3 12>
<3 13>
<4 8>
<4 9>
<4 10>
<5 7>
<5 8>
<6 6>
<7 5>
<8 4>
<8 5>
<9 4>
<10 4>
<11 3>
<12 3>
<13 3>
754 平方矩陣 II
輸入整數n,輸出乙個n階的二維陣列。陣列的形式參照樣例。輸入格式 輸入包含多行,每行包含乙個整數n。當輸入行為n 0時,表示輸入結束,且該行無需作任何處理。輸出格式 對於每個輸入整數n,輸出乙個滿足要求的n階二維陣列。每個陣列佔n行,每行包含n個用空格隔開的整數。每個陣列輸出完畢後,輸出乙個空行。資...
AcWing 754平方矩陣
題目描述 輸入整數n,輸出乙個n階的二維陣列。陣列的形式參照樣例。輸入格式 輸入包含多行,每行包含乙個整數n。當輸入行為n 0時,表示輸入結束,且該行無需作任何處理。輸出格式 對於每個輸入整數n,輸出乙個滿足要求的n階二維陣列。每個陣列佔n行,每行包含n個用空格隔開的整數。每個陣列輸出完畢後,輸出乙...
AcWing 753 平方矩陣 I
原題鏈結 題目描述 輸入整數n,輸出乙個n階的回字形二維陣列。陣列的最外層為1,次外層為2,以此類推。輸入格式 輸入包含多行,每行包含乙個整數n。當輸入行為n 0時,表示輸入結束,且該行無需作任何處理。輸出格式 對於每個輸入整數n,輸出乙個滿足要求的n階二維陣列。每個陣列佔n行,每行包含n個用空格隔...