复习(第七章2)

1、猴子选大王

要从n只猴子中选出一位大王。它们决定使用下面的方法:n只猴子围成一圈,从1到n顺序编号。从第q只猴子开始,从1到m报数,凡报到m的猴子退出竞选,下一次又从退出的那只猴子的下一只开始从1到m报数,直至剩下的最后一只为大王。请问最后哪只猴子被选为大王。

#include<stdio.h>

int main()

{

 int i,n,m,q,a[10000],j;

 scanf("%d%d%d",&n,&m,&q);

 for(i=1;i<=n;i++)

  a[i]=i;

 for(i=1;i<=n-1;i++)

 { 

  q=q+m-1;

  if(q>=n-i+2&&q<2*(n-i+2)-1)

   q=q-(n-i+1);

  else if(q>=2*(n-i+2)-1)

  {

   int k=(q-1)/(n-i+1);

   q=q-k*(n-i+1);

  }

  for(j=q;j<=n-i+1;j++)

   a[j]=a[j+1];

  if(q==n-i+1)

   q=1;

 }

 printf("%d",a[1]);

 return 0;

}

2、整数各位数字求和 

编写函数int sum(int x),求整数x的各位数字之和。编写一个程序,调用sum函数计算任一输入的整数的各位数字之和。

#include<stdio.h>

int sum(int x)

{

 if(x<10)

  return x;

 else

  return x%10+sum(x/10);

}

int main()

{

 int x,r;

 int sum(int x);

 scanf("%d",&x);

 r=sum(x);

 printf("%d\n",r);

 return 0;

}

3、阶乘和数(正序)

一个正整数如果等于组成它的各位数字的阶乘之和,则该正整数称为阶乘和数。例如正整数145,1!+4!+5!等于145,因此145就是一个阶乘和数。输入一个正整数,计算它的各位数字的阶乘之和,并判断它是否是一个阶乘和数。注意:输入的正整数,以及组成它的各位数字的阶乘之和都不会超过int类型的表示范围,并且输入的正整数的最高位不为0。

#include<stdio.h>

int f(int n)

{

    if(n==1)

        return 1;

    else if(n!=0)

        return n*f(n-1);

    else return 1 ;

}

int main()

{

    int a[10],m;

    int n,i=1,s=0,x;

    int k=0;

    scanf("%d",&n);

    printf("%d,",n);

    x=n;

    while(x!=0)

    {

 

        a[i]=x%10;

        x=x/10;

        i++;

        k++;

    }

    if(k==1)

    {

        s=f(a[k]);

        printf("%d!=%d",a[k],s);

    }

    else

    {

        for(i=k;i>=1;i--)

        {

            s+=f(a[i]);

        }

        

        for(i=k;i>1;i--)

            printf("%d!+",a[i]);

        

        m=a[1];

        

        printf("%d!",m);    

        printf("=%d",s);

    

    }    

    printf("\n");

    if(s==n)

            printf("Yes");

        else

            printf("No");

 

    return 0;

}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值