#include<bits/stdc++.h>
using namespace std;
signed main ()//正在研究signed
{
int n; cin>>n;
cout.fill('0');//不足位数补0
cout << setw(2)<<n;//setw(n)输出n位
return 0;
}
Q1:你有一架天平和 NN 个砝码,这 NN 个砝码重量依次是 W_1, W_2, · · · , W_N 。计算一共可以称出多少种不同的重量? 砝码可以放在天平两边。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005];
ll w[105];
int main() {
int n; cin>>n;
for(ll i = 0; i < n; i++) cin>>w[i];
a[0] = 1;
memset(a, 0, sizeof(a));
for(ll i = 0; i < n; i++) {
for(ll j = 100000; j >= max[i]; j--) {
a[j] = max(a[j], a[j - w[i]]);
}
}
for(ll i = 0; i < n; i++) {
for(ll j = 1; j <= 100000 - w[i]; j--) {
a[j] = max(a[j], a[j - w[i]]);
}
}
ll sum = 0;
for(ll i = 1; i <= 100000; i++) {
sum+=a[i];
}
cout<<sum<<endl;
return 0;
}
Q2:求第20行、第二十列的数字
#include<bits/stdc++.h>
using namespace std;
signed main()
{
int r = 1 , c = 1 , ans = 1;
while(r != 20 || c != 20){
if(r == 1){
if(c & 1) c ++ ;//按位与判断奇偶数(结果0为偶数,1为奇数)
else r ++ , c --;
}
else if(c == 1){
if(r % 2 == 0) r ++;
else r -- , c ++;
}
else if((r + c) % 2) r ++ , c -- ;
else r -- , c ++ ;
ans ++ ;
}
cout << ans << '\n';
return 0;
}
Q3:正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初一,跑2 千米。如果同时是周一或月初,小蓝也是跑 2 千米.从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11日周四(含)。请问这段时间小蓝总共跑步多少千米?
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool check(int i) {
if(i%400 == 0||i%4 == 0&&i%100 === 0) {
return true;
}else return false;
}
signed main() {
int ans = 0, week = 6;
int a[12] = {31, 28, 31, 30, 31, 30, 31, 30, 31, 31, 30, 31};
for(int i = 2000; i <= 2020; i++) {
if(check(i)) a[2] = 29;
else a[2] = 28;//如果去掉,2月则不能复位
for(int j = 1; j <= (i == 2020?10:12); j++){
if(i == 2020&&j == 10) d[j] = 1;
for(int day = 1; day <= d[j]; day++) {
if(week == 1||day == 1) ans+=2;
else ans++;
week = (week + 1)%7;
}
}
cout<<ans;
return 0;
}
Q4:七段码问题
数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f,g选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。请问,可以用七段码数码管表达多少种不同的字符?
#include<bits/stdc++.h>
using namespace std;
int a[7][7] = {
{0, 1, 0, 0, 0, 1, 0},
{1, 0, 1, 0, 0, 0, 1},
{0, 1, 0, 1, 0, 0, 1},
{0, 0, 1, 0, 1, 0, 0},
{0, 0, 0, 1, 0, 1, 1},
{1, 0, 0, 0, 1, 0, 1},
{0, 1, 1, 0, 1, 1, 0}
};
int choose[7];
int visited[7];
void dfs(int k) {
for(int i = 0; i < 7<; i++) {
if(a[k][i]&&choose[i]&&!visited[i]) {
visited[i] = 1;dfs(i);
}
}
}
int main() {
//ofstream cout("result.out");
int i, j, k, ans = 127;
for(i = 1; i < 127; i++) {
memset(choose, 0, sizeof(choose));
memset(visited, 0, sizeof(visited));
x = i; j = 0;
while(x) {
if(x%2) choose[j] = 1;
x /= 2;
}
k = 0;
while(!choose[k]) k++;
visited[k] = 1; dfs(k);
for(int j = 0; j < 7; j++) {
if(!visited[j]&&choose[j]) break;
}
if(j < 7) ans--;
// else{
// char c;
// for(int m = 0; m < 7; m++) {
// if(choose[m]){
// c = 'a' + m;
// cout<<c;
// }
// }cout<<endl;
// }
}
cout<<ans;
return 0;
}