如此编码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include<bits/stdc++.h>
using namespace std;
const int N = 25;

int n,m;
int a[N],c[N],b[N];

int main(){
    cin>>n>>m;
    for(int i = 1; i <= n; i++) cin>>a[i];
    c[0] = 1;
    c[1] = a[1];
    for(int i = 2 ; i <= n; i++) c[i] = c[i-1] * a[i];
    
    for(int i = 1; i <= n; i++){
        b[i] = m % a[i];
        m = m / a[i];
    }
    for(int i = 1; i <= n; i++) cout<<b[i]<<" ";
    return 0;
}

出现次数最多的数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include<bits/stdc++.h>
using namespace std;
int num[10005];

int main(){
    int n, num_max;
    cin>>n;
    memset(num, 0, sizeof(num));
    while(n--){
        int si;
        cin >> si;
        num[si]++;
        if(num[num_max] == num[si]) num_max = min(num_max, si);
        else if(num[num_max] < num[si]) num_max = si;
    }
    cout << num_max<<endl;
    return 0;
}

ISBN号码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<bits/stdc++.h>
using namespace std;

int getnumber(char x){
    return x-'0';
}

int main(){
    string isbn;
    cin >> isbn;
    int sum, x, c;
    c = 1;
    sum = 0;
    for(int i = 0; i < 12; i++){
        if(isbn[i] != '-'){
            int n = getnumber(isbn[i]);
            sum += c * n;
            c ++;
        }
    }
    x = sum % 11;
    if(getnumber(isbn[12]) == x || (isbn[12] == 'X' && x == 10)) cout<<"Right"<<endl;
    else {
        if(x == 10) isbn[12] = 'X';
        else isbn[12] = '0' + x;
        cout<<isbn<<endl;
    
    }
    
    return 0;
}

在写这道题的时候发现了关于for循环作用域的一个小细节,for循环内对外部变量的初始化只针对for循环内部有效(很像函数)。当我在for循环的小括号内对变量c和sum初始化后,for循环内部正常运行,但是在外部计算sum取余11时,sum的值就变成;但是如果我在大括号内部初始化c和sum变量时,在for循环外部也可以正常使用。

最大的矩形

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<bits/stdc++.h>
using namespace std;

int h[1005];

int main(){
    int n;
    cin>>n;
    memset(h, 0, sizeof(h));
    for(int i = 0; i < n; i ++){
        cin>>h[i];
    }
    
    int ans = 0;
    
    for(int i = 0; i < n; i++){
        int imax = 0;
        int hmin = h[i];
        for(int j = i; j < n; j++){
            hmin = min(hmin, h[j]);
            imax = max(hmin * (j - i + 1), imax);
        }
        ans = max(imax, ans);
    }
    
    cout<<ans<<endl;
    
    return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
n = int(input())
h = list(map(int, input().split()))

ans = 0
for i in range(0, n):
    imax = 0
    hmin = h[i]
    for j in range(i, n):
        hmin = min(hmin, h[j])
        imax = max(hmin * (j - i + 1), imax);
        
    ans = max(imax, ans);

print(ans)