本人能力有限,发出只为帮助有需要的人。
建议同学们自己写完后再进行讨论。
(ps.中国大学mooc的拓展题居然是学习通作业的阉割版,难度曲线属实不合理)
1.十进制数转换成其他进制数(10分)
题目内容: 编写一个程序将用户输入的十进制整数转换成给定进制的数。假设所有进制数长度不超过20位,所要转换的进制从从二进制变到九进制。
输入:十进制整数及要转换成的进制
输出:转换后的其它进制数
样例: 输入:32767 2 输出:11111111111111
样例: 输入:32767 6 输出:411411
#include <stdio.h>
int main(void)
{
long long x,n,sum=0,k=1;//此处必须用long long,因为长度可能到20
scanf("%lld %lld",&x,&n);
while(x>0)
{
sum=sum+(x%n)*k;
x/=n;
k*=10;
}
printf("%lld",sum);
return 0;
}
2.猴子选大王(10分)
题目内容:n只猴子(n<100)要选大王,选举方法如下:所有猴子按1,2,3,……, n编号围坐一圈,从第1号开始按照1,2,……, m报数,凡报到m号的退出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王。编程一个程序实现上述过程,n和m由键盘输入。
输入:猴子的数量n及报数的最大数字
输出:退出圈外的猴子编号序列(每数字后紧跟1个空格)
样例 输入: 5 3
输出: 3 1 5 2 4
#include <stdio.h>//此题就是s=1的约瑟夫问题
int main()
{
int a[10000],n,k,s,m,i,j,num;
s=1;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
a[i]=i+1;//构建个数为n的自然数数组
num=i;//num为数组中元素个数
k=s-1;//从1开始计数,所以要减一
while(num>=1)
{
k=k+m-1;//从1开始计数或者弹出一个数,计数减一
while(k>=num)//将k取模
k%=num;
printf("%d ",a[k]);
for(j=k+1;j<n;j++)//删去弹出的数
a[j-1]=a[j];
num--;
}
return 0;
}