小傻题——笨蛋的看题日记:)——>4

1007. 非重复二进制串——略微有点难

单点时限: 2.0 sec

内存限制: 256 MB

对于一个二进制串 b=bkbk-1…b1,如果对任意 i (1≤i≤k-1),满足 bi≠bi+1,那么 b 称为非重复二进制串。给定一个正整数,输出其二进制表示中最长的非重复二进制串的长度。

输入格式

第 1 行:一个整数 T (1≤T≤10) 为问题数。

第 2~T+1 行,每行一个十进制表示的正整数 n,(0<n<231)。

输出格式

对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),在接下来一行中输出 n 的二进制表示中最长的非重复二进制串的长度(前置 0 不计算在内)。

样例

input

3
7
10
999

output

case #0:
1
case #1:
4
case #2:
2
#include<stdio.h>
#include<string.h>
int reverse(int n)
{
	int arr[32] = {0};
	int len;
	for (int i = 0; i < 32; i++)
	{
		if (n > 1)
		{
			arr[i] = n % 2;
			n /= 2;
		}
		else
		{
			arr[i] = n;
			len = i+1;
			break;
		}
	}
	int max = 1, tmp = 1;
	for (int j = 0; j < len ; j++)
	{
		if ((arr[j] != arr[j + 1]) && ((j+1)!=len))
		{
			tmp++;
			if (tmp > max)
			{
				max = tmp;
			}
			continue;
		}
		 if ((j < len) && (arr[j] == arr[j+1]))
		{
			tmp = 1;
			continue;
		}
		if (j == len)
			break;
	}
	return max;
}
int main()
{
	int n,t;
	int max;
	int i = 0;
	scanf("%d", &t);
	for (; t > 0; t--,i++)
	{
		scanf("%d", &n);
		max = reverse(n);
		printf("case #%d:\n", i);
		printf("%d\n", max);
	}
}

 

1008. 二进制位不同的个数——有上一道题,便显得简单了

单点时限: 2.0 sec

内存限制: 256 MB

对于两个非负整数 x 和 y,函数 ,f(x,y) 定义为 x 和 y 在二进制表示时,其对应位不同的个数。例如,。f(2,3)=1,f(0,3)=2,f(5,10)=4。

现在给出一组非负整数 x 和 y,计算 f(x,y) 的值。

输入格式

第一行:一个整数 ()T(0<T⩽100)​,表示有 T​ 组测试数据。

第 2 行 ~ T+1 行:每行输入两个正整数 x 和 y,()(0⩽x,y⩽1000000)。两个整数之间有一个空格。

输出格式

对每组测试数据,输出一行。

样例

input

4
2 3
0 3
5 10
100 200

output

1
2
4
4
#include<stdio.h>
#include<string.h>
int reverse(int x, int y)
{
	int arr[100] = { 0 };
	int str[100] = { 0 };
	int num = 0;
	int i = 0, j = 0;
	for ( j = 0; j < 100; j++)
	{
		if (x > 1)
		{
			arr[j] = x % 2;
			x /= 2;
		}
		else
		{
			arr[j] = x;
			break;
		}
	}
	for ( i = 0; i < 100; i++)
	{
		if (y > 1)
		{
			str[i] = y % 2;
			y /= 2;
		}
		else
		{
			str[i] = y;
			break;
		}
	}
	int max = 0;
	if (j > i)
		max = j;
	else max = i;
	int count = 0;
	for (int k = 0; k < max+1; k++)
	{
		if (arr[k] != str[k])
		{
			count++;
		}
		else
			continue;
	}
	return count;
}
int main()
{
	int t;
	int x, y;
	int num = 0;
	scanf("%d", &t);
	for (; t > 0; t--)
	{
		scanf("%d%d", &x,&y);
		num = reverse(x, y);
		printf("%d\n", num);
	}
	return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值