計算特定數值下的
答案是多少
設計出一個演算法
能夠計算出那種問題在各種情況下的解
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cout << i << ' ' << j << '\n';
}
}
//
for(int i = 0; i < n; i++) {
cout << i << '\n';
}
for(int j = 0; j < n; j++) {
cout << j << '\n';
}for(int i = 0; i < n; i++) {
for(int j = i; j < n; j++) {
cout << i << ' ' << j << '\n';
}
}cout << 1/0 << '\n';int x; cin >> x; //input = INT_MAX
if(x + 1 > x) {
cout << "x + 1 > x\n";
} else {
cout << "x + 1 <= x\n";
}
cout << x + 1 << ' ' << x << '\n';真香,用過就回不去C-style string了
cin.tie(0);
ios_base::sync_with_stdio(0);更多的內容會在其他課程中提到
push_back 是建構一個臨時的物件再將他複製到尾端
emplace_back 直接呼叫建構子建構在尾端
大部分時候emplace_back的效率優於push_back
vector<pair<int,int>> v; //C++11 以前 > >
v.push_back(make_pair(1, 2));
v.push_back({1, 2}); //C++11
v.emplace_back(1, 2);
C++ 對於每種基本的資料型態(int, long long),沒有規定其確切的 byte數量,僅有規定其至少要有幾個byte以及之間的大小關係,如 long >= int。
明明bool只需要表示0, 1為什麼需要1 Byte?
while(x --> 0) {
}
while(x-- > 0) {
}
while(x--) {
}int a = 3;
int& b = a;
b = 4;
a = 5;swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
swap(&a, &b);
swap(int &a, int &b) {
int tmp = a;
a = b;
b = tmp;
}vector<int> v(10, 7122);
for(auto it = v.begin(),ed=v.end(); it!=ed; it++) {
int val = *it;
...
}
for(size_t i = 0; i < v.size(); i++) {
int val = v[i];
...
}
for(int val : v) {
...
}vector<int> v(10, 7122);
for(auto& val : v) {
}有三根杆子A,B,C,A杆上有N個穿孔圓盤,盤的尺寸由下到上依次變小,要求按下列規則將所有圓盤移到C杆
方便起見,盤子的編號由小到大/由上到下依序為 1 ~ N
#include<cstdio>
void hannoi(int n, char A, char B, char C) {
if ( n == 0 ) return;
hannoi(n-1, A, C, B);
printf("Move ring %d from %c to %c\n", n, A, C);
hannoi(n-1, B, A, C);
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
hannoi(n, 'A', 'B', 'C');
}
}int power(int a, int b) {
int res = 1;
for (int i = 0; i < b; i++) {
res *= a;
}
return res;
}int power(int a, int b) {
if (b == 0) return 1;
if (b % 2) return a * power(a, b - 1);
return power(a, b / 2) * power(a, b / 2);
}int power(int a, int b) {
if (b == 0) return 1;
if (b % 2) return a * power(a, b - 1);
int tmp = power(a, b / 2);
return tmp * tmp;
}
int power(int a, int b){
return (b == 0 ? 1 : power(a * a, b/2) * (b & 1 ? a : 1));
}int power(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res *= a;
a *= a;
b >>= 1;
}
return res;
}pow(2, 0.3333333)int gcd(int a, int b) {
for (int i = min(a, b); i >= 2; i--) {
if (a % i == 0 && b % i == 0) return i;
}
return 1;
}int gcd(int a, int b) {
if (a > b) swap(a, b);
if (b % a == 0) return a;
return gcd(a, b - a);
}int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}Divide
分 治 (Divide and Conquer)
Conquer
Combine
use two pointer
選定基準
小於基準的放左邊、大於的放右邊
int a[N];
vector<string> v(n);
bool cmp(int a, int b) {
return a > b;
}
sort(a, a + n);
sort(a, a + n, cmp);
sort(v.begin(), v.end());
sort(v.begin(), v.end(), [](string x, string y){
return x > y;
})深度優先搜尋
剪枝
遞迴大法好
int arr[] = { /* n項、已經由小到大排序 */ };
do {
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
} while (next_permutation(arr, arr+n));
| 1 | 0 | 1 | 1 | 0 | 0 |
|---|
000
001
010
011
100
101
110
111
for(int i = 0; i < (1 << n); i++) {
....
}int bsearch(int *arr, int n, int x) {
int l = 0, r = n-1, mid, ans = -1;
while(l <= r) {
mid = (l+r)/2;
if(arr[mid] == x) {
ans = mid; break;
}
if(arr[mid] < x) l = mid+1;
else r = mid-1;
}
return ans;
}
要怎麼判斷某半徑R是否能滿足需求