當前位置:首頁 » 編程語言 » 舞伴C語言

舞伴C語言

發布時間: 2022-07-02 14:14:58

❶ 如何用c語言解決舞伴問題

結構數組dancer中存放跳舞的男女,num是跳舞的人數。//男士隊列初始化//女士隊列初始化//依次將跳舞者依其性別入隊//依次輸入男女舞伴名//輸出女士剩餘人數及隊頭女士的名字//輸出男隊剩餘人數及隊頭者名字

#include<stdio.h>//舞伴配對問題(用循環隊列實現)//
#define queuesize 100
typedef struct //定義結構體-人員信息//
{
char name[20];
char sex;
} datatype;
typedef struct //定義結構體-循環隊列//
{
int front;
int rear;
int count;
datatype dancers[queuesize];
} cirqueue;
void initqueue(cirqueue *q)//建立空隊列//
{
q->front=q->rear=NULL;
q->count=0;
}
int queueempty(cirqueue *q)//判斷隊列是否為空,為空返回1,否則返回0//
{
return q->count==NULL;
}
void enqueue(cirqueue *q,datatype p)//進隊函數,使p進入隊列//
{
q->count++;
q->dancers[q->rear]=p;
q->rear=(q->rear+1)%queuesize;
}
datatype dequeue(cirqueue *q)//出隊函數,用p返回出隊值//
{
datatype p;
while(!queueempty(q))
{
p=q->dancers[q->front];
q->count--;
q->front=(q->front++)%queuesize;
return p;
}
}
datatype queuefront(cirqueue *q)//訪問隊頭元素//
{
return q->dancers[q->front];
}
void dancepartners(datatype dancers[],int num)//舞伴配對函數//
{
int i;
datatype p;
cirqueue maledancer,femaledancer;//定義兩個循環隊列結構體//
initqueue(&maledancer);//調用initqueue()函數置空隊列maledancer//
initqueue(&femaledancer);//調用initqueue()函數置空隊列femaledancer//
for(i=0;i<num;i++)
{
p=dancers[i];//結構體整體賦值//
if(p.sex=='f')//女的進隊列femaledancer//
{
enqueue(&femaledancer,p);
printf("%s進女隊\n",p.name);
}
else//男的進隊列maledancer//
{
enqueue(&maledancer,p);
printf("%s進男隊\n",p.name);
}
}
printf("配對情況如下:\n");
while (!queueempty(&femaledancer)&&!queueempty(&maledancer))//當兩個隊列都不為空時,出隊配對//
{
p=dequeue(&maledancer);
printf("男:%s",p.name);
p=dequeue(&femaledancer);
printf("和女:%s配對成功\n",p.name);
}
if(!queueempty(&femaledancer))//女隊不為空,輸出女隊第一個等待人姓名//
{
printf("女隊中還有%d個人在等待!\n",femaledancer.count);
p=queuefront(&femaledancer);
printf("女隊中第一個等待的是:%s\n",p.name);
}
else if(!queueempty(&maledancer))//男隊不為空,輸出男隊第一個等待人姓名//
{
printf("男隊中還有%d個人在等待!\n",maledancer.count);
p=queuefront(&maledancer);
printf("男隊中第一個等待的是:%s\n",p.name);
}
else printf("^-^沒有人剩餘^-^!\n");
}
main()
{
datatype p,dancers[queuesize];
int i,num;
printf("輸入男女dancer的總人數:\n");
scanf("%d",&num);
printf("輸入姓名和性別,如: \nzhangsan\nm\n");
for(i=0;i<num;i++)
{
scanf("%s",&dancers[i].name);
getchar();
scanf("%c",&dancers[i].sex);
if(dancers[i].sex!='f'&&dancers[i].sex!='m')//判斷輸入信息是否合法//
printf("第%d個人的信息有誤,請重新輸入",i--);
}
dancepartners(&dancers[0],n);
getchar();
}

❷ 利用循環隊列解決舞伴配對問題, C語言版

#include<stdio.h>int main()
{
int boy,girl,mun;
printf("請依次輸入男,女以及輪數:");
scanf("%d%d%d",&boy,&girl,&mun);
for(int Nboy=0,Ngirl=0,Nmun=0;Nmun<=mun;++Nmun)
{
if (Nboy>=boy)
{
Nboy = 0;
}
else
{
++Nboy;
}
if (Ngirl>=girl)
{
Ngirl = 0;
}
else
{
++Ngirl;
}
printf("第%d輪\t男%d號----女%d號\n",Nmun,Nboy,Ngirl);
}
return 0;
}你看看是這樣不、?/這是運行結果,你看看是不是??有什麼問題在提問

❸ 求數據結構C++舞伴配對問題程序代碼

intmain()
{
list<dancer>Mdancer;//定義dancer類鏈表,保存男舞者信息
list<dancer>Fdancer;//定義dancer類鏈表,保存女舞者信息

while(m)//輸入舞者信息
{
dancerperson;//定義臨時dancer變數,保存輸入信息
person.input();
if(person.sex!="男"&&person.sex!="女")//判斷輸入性別是否符合要求
{
cout<<"輸入的舞者性別不正確,請重新輸入";
continue;
}
elseif(person.hour<0||person.hour>23||person.minute<0||person.minute>59||person.second<0||person.second>59)
{
cout<<"輸入的舞者到場時間不正確,請重新輸入";
continue;
}
else
{
if(person.sex=="男")
Mdancer.push_back(person);//將男舞者信息存入男性鏈表
else
Fdancer.push_back(person);//將女舞者信息存入女性鏈表
}
cout<<" 是否繼續錄入舞者信息:1為繼續錄入,0為不再錄入! ";
cin>>m;
}
cout<<"首先為男性舞者排隊! ";
pai_i(Mdancer);//對男舞者進行排隊
cout<<"然後為女性舞者排隊! ";
pai_i(Fdancer);//對女舞者進行排隊

/*cout<<" 排隊後:"<<endl;//輸出排隊後所有男舞者信息
for(p=Mdancer.begin();p!=Mdancer.end();p++)
cout<<(*p).name<<""<<(*p).sex<<""<<(*p).height<<""<<(*p).hour
<<":"<<(*p).minute<<":"<<(*p).second<<endl;*/

cout<<"請輸入跳舞的最大輪數:";
intk=0;//跳舞輪數
cin>>k;
for(inti=0;i<k;i++)/*舞伴配對*/
{
intnum1=Mdancer.size();//男舞者個數
intnum2=Fdancer.size();//女舞者個數
intmin=num1<num2?num1:num2;
cout<<"第"<<i+1<<"輪舞伴配對情況: ";
if(min<=N)//舞者對數小於等於舞場容納量,則全部舞者可進入
{
for(inti=0;i<min;i++)//輸出第k輪的舞伴
{
cout<<Mdancer.front().name<<"<-->"<<Fdancer.front().name<<endl;
Mdancer.push_back(Mdancer.front());//將配對的舞者重新排在隊尾
Fdancer.push_back(Fdancer.front());
Mdancer.pop_front();//將配對的舞者從隊首刪除
Fdancer.pop_front();
}
}
else//舞者對數大於舞場容納量
{
for(inti=0;i<N;i++)//輸出第k輪的舞伴
{
cout<<Mdancer.front().name<<"<-->"<<Fdancer.front().name<<endl;
Mdancer.push_back(Mdancer.front());//將配對的舞者重新排在隊尾
Fdancer.push_back(Fdancer.front());
Mdancer.pop_front();//將配對的舞者從隊首刪除
Fdancer.pop_front();
}
}
/*每跳完一輪詢問是否有舞者要離開*/
cout<<" 是否有舞者要離開,有舞者離開請輸入1,否則輸入0! ";
intlev=0;//有舞者離開的標志,1為有舞者要離開
cin>>lev;
/*跳完舞的人默認排到了隊伍中,若選擇離開(還沒跳舞的人也可以選擇離開)*/
if(lev==1)
{
cout<<"請輸入要離開的舞者姓名:";
cin>>leaver.name;
cout<<"請輸入要離開的舞者性別:";
cin>>leaver.sex;
if(leaver.sex=="男")
Mdancer.remove_if(leave);//根據姓名從隊列中刪除舞者
elseif(leaver.sex=="女")
Fdancer.remove_if(leave);
cout<<leaver.name<<"已離開舞場! ";
}
}
return0;
}

完整文件在附件,你看下是否符合要求,有問題再問!

❹ 誰能告訴我如何用c語言編寫數據結構中的舞伴問題

typedef struct{
char name[20];
char sex;
}Person;
typedef Person DataType;

void DancePartners(Person dancer[],int num)
{
int i;
Person p;
CirQueue Mdancers,Fdancers;
InitQueue(&Mdancers);
InirQueue(&Fdancers);
for(i=0;i<num;i++){
p=dancer[i];
if(p.sex=='F')
EnQueue(&Fdancers,p);
else
EnQueue(&Mdancers,p);
}
printf("The dancing partners are:\n\n");
while(!QueueEmpty(&Fdancers)&&!QueueEmpty (&Mdancers)){
p=DeQueue(&Fdancers);
printf("%s ",p.name);
p=DeQueue(&Mdancers);
printf("%s\n",p.name);
}
if(!QueueEmpty(&Fdancers)){
printf("\nThere are %d women waiting for the next round.\n",Fdancers.count);
p=QueueFront(&Fdancers);
printf("%s will be the first to get a partner.\n",p.name);
}else
if(!QueueEmpty(&Mdancers)){
printf("\nThere are %d men waiting for the next round.\n",Mdancers.count);
p=QueueFront(&Mdancers);
printf("%s will be the first to get a partner.\n",p.name);
}
}

❺ C(C++也行)語言題(舞伴選擇)求代碼

#include<cstdio>
#include<algorithm>
#definerep(i,l,r)for(inti=l;i<=r;++i)
#defineper(i,r,l)for(inti=r;i>=l;--i)
#ifdefWIN32
#defineLD"%I64d "
#else
#defineLD"%lld "
#endif
typedeflonglongLL;
LLdfs(intl,intr){
if(l>=r)return0;
if(r-l==1)return(LL)l*r;
intmid=(l+r)>>1;
returndfs(l,mid)+dfs(mid+1,r);
}
intmain(){
intt,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
printf(LD,dfs(1,n));
}
}

O(t*nlogn)

❻ C語言實現舞伴問題(隊列)

#include<stdio.h>typedef struct que{
int *qu;
int front,rear;
}Squeue;
void Initqueue(Squeue *q,int len);
void Enqueue(Squeue *q,int n,int len);
int Dequeue(Squeue *q,int len);
int main()
{ int m,n,x,y,i,j,num=0;
Squeue q1,q2;
scanf("%d%d",&m,&n);//Input m and n;
Initqueue(&q1,m);
Initqueue(&q2,n);
for(i=0;i<m;i++) q1.qu[i]=i+1;
for(i=0;i<n;i++) q2.qu[i]=i+1; scanf("%d%d",&x,&y);//Input x and y
if(x!=y&&m==n) { printf("No chance");sleep(1000);exit(0);}
i=Dequeue(&q1,m);
j=Dequeue(&q2,n);
printf("M<-->W\n");
while(!(x==i&&y==j))
{Enqueue(&q1,i,m);<br> Enqueue(&q2,j,n);<br> printf("%d<-->%d\n",i,j);<br> i=Dequeue(&q1,m);<br> j=Dequeue(&q2,n);<br> num++;<br> }
printf("%d<-->%d\n",i,j);
printf("The number is %d\n",num+1);
free(q1.qu);
free(q2.qu);
system("pause");
return 0;
}
void Initqueue(Squeue *q,int len)
{
q->qu=(int*)malloc(len*sizeof(int)) ;
if(!q->qu) exit(0);
q->front=q->rear=0;}
void Enqueue(Squeue *q,int n,int len)
{q->qu[q->rear]=n;<br> q->rear=(q->rear+1)%len;<br>}
int Dequeue(Squeue *q,int len)
{int e;<br> e=q->qu[q->front];<br> q->front=(q->front+1)%len;<br> return e;<br>}在dev和win_tc中通過,在用隊列的時候,沒有考慮特殊情況,沒影響。下面未用隊列的演算法似乎是很簡單,也可以在dev 和win_tc上通過
#include<stdio.h>
int main()
{ int m,n;
int i,j,k=0;
int x,y;
printf("Input the number of ladies and gentlemen:");
scanf("%d%d",&m,&n);
printf("Input the location of the man and the woman:");
scanf("%d%d",&x,&y);
if(m==n&&x!=y) printf("No chance!");
else
{for(i=0,j=0;!(i==x&&j==y);i=(i+1)%m,j=(j+1)%n)<br> {printf("man(%d)<-->woman(%d)\n",i+1,j+1); k++;}
printf("\nThe number of song is:%d\n",k);
}
system("pause");
return 0;
}

❼ C語言舞伴問題--循環隊列

調用 Initqueue的時候,參數還沒初始化好
Initqueue(&Mdancers);
Initqueue(&Fdancers);

❽ 用c語言編寫舞伴配對程序,急求,快的可以加分

程序寫了一個,你看看是不是能滿足你要求,滿意請採納!!

下面是程序運行的結果:

熱點內容
阿里雲登陸遠程伺服器 發布:2022-08-10 03:51:22 瀏覽:224
ECF演算法 發布:2022-08-10 03:51:18 瀏覽:76
註解編譯器 發布:2022-08-10 03:47:08 瀏覽:4
蒸汽噴射壓縮器 發布:2022-08-10 03:44:03 瀏覽:787
itunes備份的文件夾 發布:2022-08-10 03:39:52 瀏覽:525
開發一個軟體使用什麼伺服器 發布:2022-08-10 03:39:44 瀏覽:320
心心app緩存的照片 發布:2022-08-10 03:38:25 瀏覽:1000
sql主鍵多個 發布:2022-08-10 03:36:58 瀏覽:631
aide表白源碼 發布:2022-08-10 03:35:46 瀏覽:810
大話2稱謂什麼配置可以殺過 發布:2022-08-10 03:33:19 瀏覽:116