洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)

小鱼的数字游戏:

洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)_第1张图片

代码:

#include
#include
#include
using namespace std;
const int N=110;
int q[N];
int main()
{
	int c=0;
	for(int i=0;i<110;i++){
		cin>>q[i];
		c=i;
		if(q[i]==0) break;
	}
	for(int i=c-1;i>=0;i--)cout<

对于这道题,主要用稍大一点的数组存下来,并知道其大小就好做了

查找:

洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)_第2张图片

 代码:

#include
using namespace std;
const int N=1e6+10; 
int s[N],q,n;
int main(){
	cin>>n>>q;
	for(int i=0;i>s[i];
	while(q--){
		int k;
		cin>>k;
		int l=0,r=n-1;
		while(l>1;
			if(s[mid]>=k) r=mid;
			else l=mid+1;
		}
		if(s[l]!=k) cout<<"-1"<<' ';
		else{
			cout<

又是一道二分题,本来用暴力做法结果超时,又仔细看了一下题目,抓住单调二字,就突然明白了

进制转换:

洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)_第3张图片

80代码:

#include
#include
#include
#include
#include
using namespace std;
int main()
{	int a;
	string b;
	vector A;
	cin>>a>>b;
	int n=b.size();
	for(int i=0;i

能想到高精度也算可以了,但是还是只对了80分 

洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)_第4张图片到底哪里错了呢?

其实各种情况多试几次就知道错误原因了

发现它不一定是最后一个才不需要加号,可能它后面没有数了。

所以,改变一下判断方法。

100代码:

#include
#include
#include
#include
#include
using namespace std;
int main()
{	int a;
	string b;
	vector A;
	cin>>a>>b;
	int n=b.size();
	for(int i=0;i

第一个代码主要注意最后一位的处理, 第二个代码主要对第一位进行处理

Cableway:

洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)_第5张图片

 代码:

#include 
using namespace std;
int main()
{
    int r,g,b,sum;
    while(~scanf("%d %d %d",&r,&g,&b))
    {
        sum=29;
        while(r||g||b)
        {
            if(r>=2) r-=2;
            else if(r) r=0;
            if(r||g||b) sum++;
            if(g>=2) g-=2;
            else if(g) g=0;
            if(r||g||b) sum++;
            if(b>=2) b-=2;
            else if(b) b=0;
            if(r||g||b) sum++;
        }
        cout<

考验你的逻辑思维啦!

Quasi Binary

洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)_第6张图片

 代码:

#include
#include
using namespace std;
int ans,num[10];//最多9个数就一定可以构成n
int main()
{
	int n,res;
	scanf("%d",&n);
	for(int i=1;i<=n;i*=10)
	{
		res=(n/i)%10;//每一位的数值
		ans=max(ans,res);//ans求最大的一位数 
		for(int j=1;j<=res;++j) num[j]+=i;
	}
	cout<

重要结论:

由于每一位最大是 1,所以对于一个数的某一位的值为 a,就至少需要 a 个数来填满这个位置。由于一个填充位置的数同时可以多个位置是 1,因此答案就是所有位数中最大的那一位的值。

你可能感兴趣的:(洛谷,c++,算法)