㈠ 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位無符號整數