当前位置:首页 » 编程语言 » 货运列车车厢重排c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

货运列车车厢重排c语言

发布时间: 2022-02-28 14:47:25

㈠ 关于货物运输的最佳路线问题,c语言编程

草,这种问题很大的,我要是回答你,这一万字还不够说冰山一角的,那么多算法那么多实现那么多思路……

㈡ 用C语言编写一个高铁车次,站台,定员编组变化系统,要求输入日期,就显示车次,站台,定员以及编组变化

那起码得链接到动车机组的数据库,一般的会点C语言的都可以做,天下没有免费的午餐!

㈢ C语言 车厢重组 归并排序

这题的题目意思其实是要将一个序列排成有序的,最少要交换多少次,可以用数状数组统计。
这题的答案其实是等于原始序列的逆序数。
答案已经发到你的邮箱。注意查收。

㈣ 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语言 数据结构

#include<iostream.h>
#include<assert.h>

class stack
{
private:
int * element;
int maxsize;
int top;
public:
void friend search(stack &s1,stack &s2,stack &s3);
stack(int n)
{ element=new int [n];
maxsize=n;
assert(element!=NULL);
top=-1;
}
void stack::push(int n)
{
assert(!isfull());
top++;
element[top]=n;
}
int stack::pop()
{
assert(!isempty());
int a=element[top];
top--;
return a;
}
bool isfull()
{
if(top==maxsize-1)
return 1;
else
return 0;
}
bool isempty()
{
if(top==-1)
return 1;
else
return 0;
}
void stack::print()
{
for(int i=0;i<top+1;i++)
cout<<element[i];
cout<<endl;
}
};
void search(stack &s1,stack &s2,stack &s3)
{
if(!s1.isempty())
{
s2.push(s1.pop());
search(s1,s2,s3);
s1.push(s2.pop());
}

if(!s2.isempty())
{
s3.push(s2.pop());
search(s1,s2,s3);
s2.push(s3.pop());
}
if( s3.isfull())
{
s3.print();
}
}
void main()
{
cout<<"请输车厢长度n: ";
int n; cin>>n;
stack s1(n);
for(int i=n;i>=1;i--)
s1.push(i);
stack s2(n),s3(n);
cout<<"输出序列为:"<<endl;
search(s1,s2,s3);
}

㈥ 两道C语言编程题题,求解!

(1)
#include <stdio.h>
void main(){
int i,j,n,K;
char s[100],x;
scanf("%d",&n);
for (j=0;j<n;j++){
scanf("%d\n",&K);
gets(s);
for (i=0;i<strlen(s);i++) {
x = s[i];
if ( (s[i] >= 'a') && (s[i] <= 'z') ) {
x = s[i]+K;
if (x > 'z') x = x - 26;
if (x < 'a') x = x + 26;
};
if ( (s[i] >= 'A') && (s[i] <= 'Z') ){
x = s[i]+K;
if (x > 'Z') x = x - 26;
if (x < 'A') x = x + 26;
}
printf("%c",x); };
printf("\n");
};
exit(0);
}

(2)
题意不清,是不是输入数在0-15之间。也就是4bit数。否则什么叫“最高位”?
只有4bit,也就是不必去做位运算,查表code[16][5]就可以了。
#include <stdio.h>
void main(){
int d;
char code[16][5]={"0000","0001","0011","0010","0110","0111",
"0101","0100","1100","1101","1111","1110",
"1010","1011","1001","1000"};
printf("input n\n");
scanf("%d",&d);
printf("%s",code[d]);
}

㈦ 车厢调度 代码 C语言版 看清题在答

c++的代码就有,C语言的只帮你找了这个,你看看是否合适【分析】 为了重排车厢,需从前至后依次检查入轨上的所有车厢。如果正在检查的车厢就是下一个满足排列要求的车厢,可以直接把它放到出轨上去。如果不是,则把它移动到缓冲铁轨上,直到按输出次序要求轮到它时才将它放到出轨上。缓冲铁轨是按照LIFO的方式使用的,因为车厢的进和出都是在缓冲铁轨的顶部进行的。在重排车厢过程中,仅允许以下两种移动:
①车厢可以从入轨的前部(即右端)移动到一个缓冲铁轨的顶部或出轨的左端。
②车厢可以从一个缓冲铁轨的顶部移动到出轨的左端。
考察图2-18。3号车厢在入轨的前部,但由于它必须位于1号和2号车厢的后面,因此不能立即输出3号车厢,可把3号车厢送入缓冲铁轨H1。下一节车厢是6号车厢,也必须送入缓冲铁轨。如果把6号铁轨送入H1,那么重排过程将无法完成,因为3号车厢位于6号车厢的后面,而按照重排的要求,3号车厢必须在6号车厢之前输出。因此可把6号车厢送入H2。下一节车厢是9号车厢,被送入H3,因为如果把它送入H1或H2,重排过程也将无法完成。请注意:当缓冲铁轨上的车厢编号不是按照从顶到底的递增次序排列时,重排任务将无法完成。至此,缓冲铁轨的当前状态如图2-19a所示。
图2-19 缓冲铁轨中间状态
接下来处理2号车厢,它可以被送入任一个缓冲铁轨,因为它能满足缓冲铁轨上车厢编号必须递增排列的要求,不过,应优先把2号车厢送入H1,因为如果把它送入H3,将没有空间来移动7号车厢和8号车厢。如果把2号车厢送入H2,那么接下来的4号车厢必须被送入H3,这样将无法移动后面的5号、7号和8号车厢。新的车厢u应送入这样的缓冲铁轨:其顶部的车厢编号v满足vu,且v是所有满足这种条件的缓冲铁轨顶部车厢编号中最小的一个编号。只有这样才能使后续的车厢重排所受到的限制最小。我们将使用这条分配规则(assignment
rule)来选择缓冲铁轨。
接下来处理4号车厢时,三个缓冲铁轨顶部的车厢分别是2号、6号和9号车厢。根据分配规则,4号车厢应送入H2。这之后,7号车厢被送入H3。图2-19b给出了当前的状态。接下来,1号车厢被送至出轨,这时,可以把H1中的2号车厢送至出轨。之后,从H1输出3号车厢,从H2输出4号车厢。至此,没有可以立即输出的车厢了。
接下来的8号车厢被送入H1,然后5号车厢从入轨处直接输出到出轨处。这之后,从H2输出6号车厢,从H3输出7号车厢,从H1输出8号车厢,最后从H3输出9号车厢。
对于图2-19a的初始排列次序,在进行车厢重排时,只需三个缓冲铁轨就够了,而对于其他的初始次序,可能需要更多的缓冲铁轨。例如,若初始排列次序为1,n,n-1,…,2,则需要n-1个缓冲铁轨。
为了实现上述思想,用k个链表形式的堆栈来描述k个缓冲铁轨。之所以采用链表形式的堆栈而不是公式化形式的堆栈,原因在于前者仅需要n-1个元素。函数Railroad用于确定重排n个车厢,它最多可使用k个缓冲铁轨并假定车厢的初始次序为p[1:n]。如果不能成功地重排,Railroad返回false,否则返回true。如果由于内存不足而使函数失败,则引发一个异常NoMem。
函数Railroad在开始时创建一个指向堆栈的数组H,H[i]代表缓冲铁轨i,1≤i≤k。NowOut是下一个欲输出至出轨的车厢号。minH是各缓冲铁轨中最小的车厢号,minS是minH号车厢所在的缓冲铁轨。
在for循环的第i次循环中,首先从入轨处取车厢p[i],若p[i]=NowOut,则将其直接送至出轨,并将NowOut的值增1,这时,有可能会从缓冲铁轨中输出若干节车厢(通过while循环把它们送至出轨处)。如果p[i]不能直接输出,则没有车厢可以被输出,按照前述的铁轨分配规则把p[i]送入相应的缓冲铁轨之中。
【解答】
Railroad(int p[],int n,int k)
{
∥k个缓冲铁轨,车厢初始排序为p[1:n]
∥如果重排成功,返回1,否则返回0
∥创建与缓冲铁轨对应的堆栈
LinkedStack<int>*H;
H=new LinkedStack<int>[k+1];
int NowOut=1; ∥下一次要输出的车厢
int minH=n+l; ∥缓冲铁轨中编号最小的车厢
int minS; ∥minH号车厢对应的缓冲铁轨
∥车厢重排
for(int i=1;i<=n;i++)
if(p[i]==NowOut){∥直接输出t
printf("Move car %d from input to output.\\n",p[i]);
NowOut++;
∥从缓冲铁轨中输出
while(minH==NowOut){
Output(minH,minS,H,k,n);
NowOut++;
}
}
else{ ∥将p[i]送入某个缓冲铁轨
if(!Hold(p[i],minH,minS,H,k,n))
return 0;
}
return 1;
}
下面分别给出了Railroad中所使用的函数Output和Hold。Output用于把一节车厢从缓冲铁轨送至出轨处,它同时将修改minS和minH。函数Hold根据车厢分配规则把车厢c送入某个缓冲铁轨,必要时,它也需要修改minS和minH。
void Output(int& minH,int& minS,LinkedStack<int>H[],int k,int n)
{
∥把车厢从缓冲铁轨送至出轨处,同时修改minS和minH
int c;∥车厢索引
∥从堆栈minS中删除编号最小的车厢minH
H[minS].Delete(c);
printf("Move car %d from holding track %d to output.\\n",minH,minS);
∥通过检查所有的栈顶,搜索新的minH和minS
minH=n+2;
for(int i=1;i<=k;i++)
if(!H[i].IsEmpty()&&(c=H[i].Top())<minH){
minH=c;
minS=i;
}
} http://www.huachu.com.cn/read/readbookinfo.asp?sectionid=1000000751

㈧ 已知货物长宽高的装箱问题,求c语言代码

你这N 到底是多少 ,求具体数值。

㈨ 求c语言火车车厢重排需文档分析 设计理念

好的。。。等下发给你哈。。

㈩ 火车进站出站后重新组合 编写c语言判断能否编排需要的顺序。c语言大神帮帮忙

#include<stdio.h>
#defineN1000
structstack{
inttop;
intdata[N];
};
intpush(structstack*s,intnumber)
{
if(s->top>=N-1)
return-1;
s->data[++s->top]=number;
returns->top;
}
intpop(structstack*s)
{
if(s->top==-1)
return-1;
return(s->data[s->top--]);
}
voidpushpop(inttrain[])
{
inti,j=1;//j代表从A轨道中的车厢,从1到N顺序排列
structstackbuffer;//保存进入车站的车厢
buffer.top=-1;//堆栈为空时,top=-1
for(i=0;i<N&&train[i]!=0;i++){
if(buffer.top>=0&&buffer.data[buffer.top]==train[i]){
pop(&buffer);//如果车站中最上面的车厢号就是下一个要排在B轨道上的车厢,将其移到B轨道中
continue;
}
while(train[i]!=j){
push(&buffer,j++);//如果A轨道中当前的第一个车厢不是进入B轨道上的下一个车厢,就将它移到车站里,继续比较A轨道中的下一个车厢
if(j>=N)//如果A轨道中所有的车厢都空了,就结束
break;
}
if(j>=N)//如果A轨道中所有的车厢都空了,就结束
break;
elseif(train[i]==j)//如果A轨道中当前的第一个车厢就是B轨道中的下一个车厢,就将它移到B轨道中
j++;
}
if(train[i]==0||buffer.top==-1)//如果所有的车厢都比较过之后,buffer是空的,说明能排成需要的顺序
printf("Yes ");
else
printf("No ");
}

main()
{
inttrain[N],i;//train中保存的是B轨道上的车厢序列
printf("Input ");
//问题中的第一行输入没有用,就去掉了
for(i=0;i<N;i++){
scanf("%d",train+i);
if(train[i]==0)
break;
}
pushpop(train);
}