㈠ 關於貨物運輸的最佳路線問題,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);
}