㈠ c语言排队问题
#include<stdio.h>
void main()
{
int i;
int j=0;
for(i=10;i<1000;i++)
{
if((i%5==2)&&(i%7==3)&&(i%3==1))
{
if(j==0)
printf("有一下几种可能性:\n");
printf("第%d可能性是:%d\n",j+1,i);
j++;
}
}
}
㈡ C语言N名同学,排成一排,有多少中排列方法
这个问题需要拆解成两个部分解决:
1.n个同学排成一排的数学解
2.将上面数学解或者数学过程转化为程序代码
于是:
对于第1部分:
这个是一个全排列问题,解为n的阶乘,表示为:n!=1*2*3...*n
如果没学过,稍微解释一下为什么:
n个人排一排,那么显然肯定是n个位置,我们顺序来看,第一个位置:可以随便放n个人中任何一个,所以n种可能;第二个位置:前面已经放了一个人,也就总共只有n-1个人了,所以只能n-1种可能...到最后一个位置,只剩下最后一个人了,所以只有最后1种可能;
那么上面乘起来就是n!种情况了
于是第二个部分,实现n!
显然需要递归或者循环,看学过哪个吧~
下面只写核心部分,声明就略了
result表示结果,建议考虑用long或者更大位数的,阶乘很可怕,结果数值很大
循环(for为例):
for(int i=1;i<=n;i++){
result*=i;
}
递归
主函数调用:Func(n);
函数声明:
long Func(int value){
if(value==1)
return 1;
else
return value*Func(value-1);
}
㈢ C语言程序,关于银行排队的。在线等!
#include<stdio.h>
#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=0;i<10;i++)
for(j=0;j<10;j++)
p[i][j]='\0';
printf("输入ID时不超过10位,第一位不能为'*'\n");
i=0;
while(1)
{
while(i<m)
{
printf("请输入第%d名的ID:",i+1);
ch=getchar();
for(j=0;j<10;j++)
{
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=i;x<m;x++)
for(j=0;j<10;j++)
p[x][j]='\0';
}
for(j=0;j<i;j++)
{
printf("第%d名:",j+1);
printf("%s\n",p[j]);
}
free(p);
return 0;
}
㈣ C语言 列车排队
#include<stdio.h>
#include<stdlib.h>
typedefstructnode
{
intn;
structnode*next;
}Node;
voidprintLink(Node*head)
{
if(head==NULL)return;
Node*p=head->next;
while(p)
{
printf("%d",p->n);
p=p->next;
}
printf(" ");
}
voidcountLink(Node*head)
{
if(head==NULL)return;
Node*p=head->next;
intcnt=0;
while(p)
{
cnt++;
p=p->next;
}
printf("%d ",cnt);
}
voidprintReverseLink(Node*&head)
{
if(head==NULL)return;
Node*p=head->next,*q;
head->next=NULL;//断开头结点和结点
//以下循环将所有结点逆序连接,然后调用printLink来输出就是逆序了
while(p)
{
q=p->next;
p->next=head->next;//让当前节点指向头结点的下一个结点,
head->next=p;//让头结点的next指向当前结点,那么当前结点就会成为头结点的下一个节点了
//以上逆转结点的过程你必须会,可以通过画图看看,指针是对CC++来说很重要的东西
p=q;
}
printLink(head);
}
voidcreateLink(Node*&head)
{
if(head==NULL)
head=newNode;
head->next=NULL;
head->n=0;
Node*p=head,*q;
intn;
while(scanf("%d",&n)!=-1)
{
if(n==0)break;
q=newNode;
q->next=NULL;
q->n=n;
p->next=q;//这个添加结点的过程你必须会,可以通过画图看看,指针是对CC++来说很重要的东西
p=q;
}
}
intmain()
{
Node*head=NULL;
createLink(head);
printLink(head);
countLink(head);
printReverseLink(head);
system("pause");
return0;
}
㈤ C语言银行排队系统
你所指的队列是线程吗?
线程操作,大概思路如下:
1. 创建4个线程,表示四个窗口,用semaphore来等待客户进入(WaitForSingleObject).
2. 创建n个线程表示客户,每创建一个客户增加一个ReleaseSemaphore,以让窗口处理(记录相关信息,随机时间可以用srand获取),窗口要设定为while循环,可以多次处理,条件可以设置为处理多少个客户就可以退出.
3. 共用资源记得设置临界区CriticalSection.
㈥ C语言:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子,
#include<stdio.h>
#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=1;out_n++;}//为0(即3)出局
}
p++;if(p==a+N)p=a;//循环转向下一人
}
printf("最后剩余者的编号是:%d ",p+1-a);
}
(6)c语言排队论扩展阅读:
printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。
函数的原型为:int printf(const char*format,...);函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。
printf()函数的调用格式为:
printf("<;格式化字符串>",<参量表>);
其中格式化字符串包括两部分内容:一部分是正常字符;这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。
参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。
规定符
%d十进制有符号整数
%u十进制无符号整数
%f浮点数
%s字符串
%c单个字符
%p指针的值
%e指数形式的浮点数
%x,%X无符号以十六进制表示的整数
%o无符号以八进制表示的整数
%g把输出的值按照%e或者%f类型中输出长度较小的方式输出
%p输出地址符
%lu 32位无符号整数
%llu 64位无符号整数