1.N只猴子要选大王,选举方法是:所有猴子按1、2、…、n编号围坐成一个圆圈,从第1号开始按照1、2、…、m报数,凡报到m号的猴子退出圈外,如此循环报数,指导圈内剩下最后一只猴子,则这只猴子就是大王。编写一个程序实现上述过程,n和m由键盘输入。
提 示:此题的算法和技巧可参考“Eratoshenes筛法求1-100之间的素数”一题。
int main()
{
int n,m,i,out,num=0;
scanf("%d %d",&n,&m);
int a[n];
out=0;//已经退出的猴子的数目先初始化为0
memset(a,0,sizeof a);
for(i=0;out<n;i++)
{
if(i==n)//如果i在进行自增的过程中已经达到了n,让i的值置为0,进行后面的判断
i=0;
if(!a[i])//这个a[i]本质上和flag作用一样
{
num++;
if(num==m)
{
num=0;
out++;//退出的猴子的数目+1
a[i]=1;
if(out==n)//如果猴子都退出了
{
printf("%d",i+1);//i+1就是大王
}
}
}
}
return 0;
2.判断输入的字符串是否为回文。
作业3
#include <stdio.h>
#include <string.h>
int main()
{
char s[100];
int i,j;
int a=0;
printf("输入字符串:");
scanf("%s",&s);
for(i=0,j=strlen(s)-1;i<=j;i++,j--)
{
if (s[i]==s[j])
a++;
}//从头至尾逐个比较,条件成立a值累加
if(a==(strlen(s)+1)/2)//整除条件下无论strlen(s)是奇数还是偶数都成立
printf("%s:是回文",s);
else
printf("%s:不是回文",s) ;
return 0;
}
3.编写一个程序,其中包含一个子函数,功能为取出数x从右边起的第m位数字,如digit(1234,3)=2,digit(1234,6)=0
#include<stdio.h>
int digit(int n ,int k)
{
k--;//对于k进行自减操作,如果k等于0,说明只需要返回个位数
if(k==0)
return n%10;
else
digit(n/=10,k);//不断缩小n的值,直到返回个位
}
int main()
{
int a,b;
printf("请输入x和n的值:");
scanf("%d %d",&a,&b);
printf("digit<%d, %d>=%d",a,b,digit(a,b));
return 0;
}
//举例digit(1234,4)
//n=1234,3
//n=123,k=2
//n=12,k=1
//n=1,k=0
//返回1
//digit(1234,3)
//n=1234,2
//n=123,1
//n=12,0
//返回2