ช่วยแก้โค้ดภาษาซีหน่อยครับ ไม่ได้ยุ่งกับมันมานาน เพิ่งจะกลับมาเขียนอีก เลยยังมึนๆอยู่
ปัญหาคือ ผมต้องการให้ # คอลัมน์แรกมันไปอยู่ล่างสุด แต่มันดันเว้นไว้ 2 บรรทัด แก้ยังไงก็ไม่ได้ ไม่รู้ผิดตรงไหน
โจทย์มันคือ ให้ใส่ตำแหน่งวัตถุที่จะลอยเท้งเต้งอยู่ กับตำแหน่งอากาศ แล้วก็ใส่จำนวนอิฐในแต่ละคอลัมน์ลงไป
ให้เราแสดงผลสุดท้าย โดยถ้าอิฐตกลงบนของที่ลอยอยู่ มันจะต่อขึ้นไป แต่ถ้าไม่มีก็จะกองที่พื้นแทน
นี่โจทย์เต็มๆครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้ในตารางเกมขนาด N แถว M คอลัมน์ โดยในตารางมีสิ่งกีดขวางวางเอาไว้ ด้านบนมีก้อนอิฐหลายๆ ก้อนที่กำลังจะหล่นลงมา ตัวอย่างของเกมดูได้ในตัวอย่างข้อมูลนำเข้า เป็นตารางขนาด (N=8)x(M=5) ซึ่งสถานะเริ่มต้นของตารางเกมแสดงในตัวอย่างข้อมูลน้ำเข้า และเมื่อเกมได้ประมวลผลแล้ว ซึ่งก็คืออิฐตกจากด้านบนลงสู่ด้านล่าง จะเห็นว่าอิฐจะมีการตกค้างที่สิ่งกีดขวาง และผลลัพธ์หลังจากประมวลเสร็จสิ้นดังแสดงในตัวอย่างข้อมูลส่งออก
จงเขียนโปรแกรมเพื่อรับตารางเกมเริ่มต้นและจำนวนอิฐที่จะตกลงมาในแต่ละคอลัมน์ ให้ประมวลผลก้อนอิฐทุกก้อน โดยมีเงื่อนไขดังนี้
(1) ถ้าก้อนอิฐตกลงมาแล้วพบสิ่งกีดขวางที่อยู่ในตารางเกม ก็จะค้างอยู่ ณ ตำแหน่งที่พบสิ่งกีดขวาง
(2) ถ้าก้อนอิฐไม่พบสิ่งกีดขวางจะตกลงมาอยู่แถวล่างสุด เมื่อประมวลผลครบทุกก้อนอิฐให้แสดงผลสถานะของตารางเกม
ข้อมูลนำเข้า
รับข้อมูลจากแฟ้มข้อมูลนำเข้า
บรรทัดแรก จะระบุจำนวนเต็มสองจำนวน N และ M โดยที่ 1 < N < 20 และ 1 < M < 20
N บรรทัดถัดไป จะเป็นการระบุตารางเกม โดยในบรรทัดที่ 1 + I จะเป็นข้อมูลของตารางเกมแถวที่ I ซึ่งจะระบุเป็นสายอักขระความยาว M ตัวอักขระ ที่มีรูปแบบดังนี้ (1) เครื่องหมายจุด ‘.’ แทนช่องที่ว่างในตารางเกม และ (2) ตัวอักษร ‘O’ ((ตัวพิมพ์ใหญ่โอ) แทนช่องที่มีสิ่งกีดขวางอยู่
บรรทัดสุดท้าย ประกอบด้วยตัวเลข M ตัวคือ M1,M2,M3,… แต่ละตัวคั่นด้วยช่องว่างหนึ่งช่อง ตัวเลข คือจำนวนก้อนอิฐที่จะตกลงมาในคอลัมน์ที่ j โดยที่ 0≤aj≤20
ข้อมูลส่งออก
ให้เขียนผลลัพธ์ออกทางแฟ้ม โดยให้ระบุตารางเกมผลลัพธ์ในรูปแบบเดียวกับในแฟ้มข้อมูลนำเข้า ให้ใช้เครื่องหมาย ‘#’ แทนก้อนอิฐอยู่ในตาราง
http://www.programming.in.th/task/rev2_problem.php?pid=1001
นี่โค้ดผมครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้#include <stdio.h>
int A[50][50];
int B[50];
int m,n,k;
void play(int i,int j)
{
if (i==n)
{
A[j] = 2;
return 0;
}
else
{
if (A[i+1][j]==0)
play (i+1,j);
else if (A[i+1][j]==1)
A[j] = 2;
else if (A[i+1][j]==2)
A[j] = 2;
}
}
int main(){
int i,j,a;
scanf("%d %d",&m,&n);
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
scanf(" %c",&A[j]);
if (A[j]=='O')
A[j] = 1;
else if (A[j]=='.')
A[j] = 0;
}
}
for (j=0;j<n;j++)
{
scanf(" %d",&B[j]);
}
for (j=0;j<n;j++)
{
i=0;
if (B[j]>0)
for (k=0;k<B[j];k++)
play (i,j);
}
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
if (A[j] == 1)
printf("O");
else if (A[j] == 0)
printf(".");
else if (A[j] == 2)
printf("#");
// printf("%d",A[j]);
}
printf("\n");
}
return 0;
}
อาจจะมีผิดเยอะอยู่หน่อย ผมรู้ไม่เยอะ แถมไม่ค่อยขยันอีกต่างหาก ๕๕๕๕๕
ช่วยแก้โค้ดภาษาซีหน่อยครับ
ปัญหาคือ ผมต้องการให้ # คอลัมน์แรกมันไปอยู่ล่างสุด แต่มันดันเว้นไว้ 2 บรรทัด แก้ยังไงก็ไม่ได้ ไม่รู้ผิดตรงไหน
โจทย์มันคือ ให้ใส่ตำแหน่งวัตถุที่จะลอยเท้งเต้งอยู่ กับตำแหน่งอากาศ แล้วก็ใส่จำนวนอิฐในแต่ละคอลัมน์ลงไป
ให้เราแสดงผลสุดท้าย โดยถ้าอิฐตกลงบนของที่ลอยอยู่ มันจะต่อขึ้นไป แต่ถ้าไม่มีก็จะกองที่พื้นแทน
นี่โจทย์เต็มๆครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
นี่โค้ดผมครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
อาจจะมีผิดเยอะอยู่หน่อย ผมรู้ไม่เยอะ แถมไม่ค่อยขยันอีกต่างหาก ๕๕๕๕๕