
#include<malloc.h>
#define N 10
int main(void)
{
int i,j,x,m,flag=1
char ch
m=N
char (*p)[10]=(char (*)[10])calloc(N,10*sizeof(char))
for(i=0i<10i++)
for(j=0j<10j++)
p[i][j]='\0'
printf("输入ID时不超过10位,第一位不能为'*'\n")
i=0
while(1)
{
while(i<m)
{
printf("请输入第%d名的ID:",i+1)
ch=getchar()
for(j=0j<10j++)
{
if(j==0&&ch=='*')
{
flag=0
break
}
if(ch=='\n')
break
p[i][j]=ch
ch=getchar()
}
if(flag==0)
break
i=i+1
}
if(flag==0)
break
m=m+N
p=(char (*)[10])realloc(p,m*10*sizeof(char))
for(x=ix<mx++)
for(j=0j<10j++)
p[x][j]='\0'
}
for(j=0j<ij++)
{
printf("第%d名:",j+1)
printf("%s\n",p[j])
}
free(p)
return 0
}
#include&ltstdio.h&gt
#define N 5//人数
void main()
{
int a[N]={0},i=0,out_n=0,call_n=0,*p
p=a
while(1){//循环报数
if(*p==0){//如果健在
if(out_n==(N-1))break//如果仅剩一人
call_n++//报数
call_n%=3//最大为3,到了3就从0开始
if(call_n==0){*p=1out_n++}//为0(即3)出局
}
p++if(p==a+N)p=a//循环转向下一人
}
printf("最后剩余者的编号是:%d\n",p+1-a)
}
扩展资料:printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。
函数的原型为:int printf(const char*format,...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。
printf()函数的调用格式为:
printf("&lt;格式化字符串&gt",&lt参量表&gt);
其中格式化字符串包括两部分内容:一部分是正常字符;这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
规定符
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%p指针的值
%e指数形式的浮点数
%x,%X无符号以十六进制表示的整数
%o无符号以八进制表示的整数
%g把输出的值按照%e或者%f类型中输出长度较小的方式输出
%p输出地址符
%lu 32位无符号整数
%llu 64位无符号整数
此题可用数学方法求解。
设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数 (用数学方法解的时候需要注意应当从0开始编号,因为取余会取到0解。)
实质是一个递推,n个人中最终留下来的序号与n-1个人中留下来的人的序号有一个递推关系式。
假设除去第k个人,则
0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 // 原始序列 (1)
0, 1, 2, 3, ..., k-2, , k, ..., n-1 // 除去第k人,即除去序号为k-1的人 (2)
k, k+1, ..., n-1, 0, 1, ..., k-2// 以序号k为起始,从k开始报0 (3)
0, 1, ..., n-k-1, n-k, n-k+1, ..., n-2 // 作编号转换,此时队列为n-1人 (4)
变换后就完完全全成为了(n-1)个人报数的子问题,注意(1)式和(4)式,是同一个问题,不同的仅仅是人数。比较(4)和(3),不难看出,0+k=k, 1+k=k+1, ... ,(3)式中'0'后面的数字,((n-3)+k)%n=k-3,((n-2)+k)%n=k-2, 对于 (3)式中'0'前面的数字,由于比n小,也可看作(0+k)%n=k, (1+k)%n=k+1, 故可得出规律:
设(3)中某一数为x' , (4)中对应的数为x,则有:x'=(x+k)%n.
设x为最终留下的人序号时,队列只剩下1人时,显然x=0此时可向前回溯至2人时x对应的序号,3人时x对应的序号……直至n人时x的序号,即为所求。
递归法表示如下:
#include <iostream>using namespace std
const int m = 3
int main()
{
int n,f=0
cin >> n
for (int i=2i<=ni++)
f=(f+m)%i
cout <<f+1<<endl
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)