数组(2)

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 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值