学习总结 2020-11-29
青蛙过河
一只青蛙想要过河。 假定河流被等分为 x 个单元石,并且在每一个单元石内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。
给定石子的位置列表(用单元石序号升序表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一个石子上)。 开始时, 青蛙默认已站在第一个石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元石1跳至单元石2)。
如果青蛙上一步跳跃了 k 个单位,那么它接下来的跳跃距离只能选择为 k - 2、k 或 k + 2个单位。 另请注意,青蛙只能向前方(终点的方向)跳跃。
请注意:
石子的数量 ≥ 2 且 < 1100; 每一个石子的位置序号都是一个非负整数,且其 < 231; 第一个石子的位置永远是0
分析简单暴力,记住判别情况,模拟样例就可
# include<stdio.h>
int main()
{
int n=0,flag=0,j=0,t=0;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
if(a[0]!=0||a[1]!=1)
{
printf("false");
return 0;
}
else
{
while(flag)
{
int t=a[j]-a[j-1];
if(a[j+1]-a[j]>=t-2&&a[j+1]-a[j]<=t+2)
flag=1;
else flag=0;
j++;
n--;
if(n==1)
break;
}
}
if(flag=1)
printf("true");
else
printf("false");
return 0;
}
分清楚临界值即可
那就是一吧
给定一个十进制整数N,求其对应2进制数中1的个数
# include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for( int j=0;j<n;j++)
{
int count=0;
while(a[j])
{
if(a[j]%2==1)
count++;
a[j]/=2;
}
printf("%d\n",count);
}
return 0;
}
通过循环遍历,将其十进制化为二进制,即可。