题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
提示:用数组完成
#include <stdio.h>
int main()
{
int n;
printf("输入人数:\n");
scanf("%d",&n);
int a[1000];
int i,temp;
int count = 0;
temp = n;
for(i = 0;i < n;i++)
{
a[i] = i+1;
}
i = 0;
while (n>1)
{
if(a[i] != 0) //不改变第一次报数值,只是让数字3的人为0
{
count++;
}
if(count == 3)
{
a[i] = 0; //让数到3的人为0
count = 0;
n--; //人数-1
}
i++;
if(i == temp)
{
i = 0;
}
}
for(i = 0;i < temp;i++)
{
if(a[i] != 0) //此时所有数到3的人都清零了,只有剩下的那一个不为0
{
printf("余下的为:%d号\n",a[i]);
}
}
return 0;
}
3.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
#include<stdio.h>
int main()
{
int a,b,c;
int p1,p2;
printf("输入一个数\n");
scanf("%d",&a);
printf("输入p1,p2\n");
scanf("%d%d",&p1,&p2);
for(b=p2;b>=p1;b--)
{
c = 1&(a>>b-1); //执行b-1,a定位到p2位,1&p2位二进制数,此时a值不会变
printf("%d",c?0:1);
}
printf("\n");
return 0;
}