Problem - A - Codeforces
题目大意:现在规定一种只由0和1组成的数字,我们称这种数字为二进制数字,例如10,1010111,给定一个数n,求该数字最少由多少个二进制数字组成.
解题思路:每取一个二进制数字,可以使得原数字n上各位都减小1或者0,为了使次数尽可能地小,那么当原数字n上各位不为0的时候都应该-1,那么最小的次数就是各位上最大的数字.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(x,y,z) for (int x= y; x<= z; ++x)
#define dec(x,y,z) for (int x= y; x>= z; --x)
#define INF 0x3f3f3f3f
int t, n;
int main(){
cin>>t;
while(t--){
cin>>n;
int num = 0;
int ans = 0;
while(n){
int temp = n % 10;
ans = max(ans, temp);
n /= 10;
}
cout <<ans <<endl;
}
return 0;
}
Problem - B - Codeforces
题目大意:给定一个高为h,宽为w的网格,你可以在网格的四个边缘处,放置一个盘子,每个盘子的四周都不能有别的盘子(四周指的是最近的8个格子),请输出一个种安排方式.
思路:模拟题,首先为了使个数尽可能多,那么一定是从第一个开始放置,然后检测后面是否合法,如果合法就放下盘子,如果不合法就跳过.
#include<bits/stdc++.h>
using namespace std;
#define ll long