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;
}