sa1378
دوشنبه 21 مهر 1393, 10:15 صبح
سلام
این سوالی هست که باید براش کد بزنم:
گربههای فضایی
دانشمندان فضایی دورترین سیارهی یافته شده را «سیاره دوردست» نامگذاری کردهاند. سیاره دوردست گربههای عجیبی دارد. این گربهها علاقه زیادی به حرکت به سمت شمال دارند. آنها وقتی صبح از خواب بیدار میشوند، سعی میكنند به سمت شمال قدم بردارند. هنگام قدم زدن به سمت شمال اگر مانعی جلوی قدم زدنشان را بگیرد، به سمت شرق حركت میكنند. بعد از هر قدم که به سمت شرق بر میدارند، اگر باز بتوانند به سمت شمال حرکت کنند، به سمت شمال میروند و در غیر این صورت به حرکتشان به سمت شرق ادامه میدهند. البته در شرایطی که حرکت به سمت شمال امکان پذیر نباشد و راهی هم برای رفتن به سمت شرق نداشته باشند، در همان محل متوقف میشوند.
این گربهها با اینكه هوش زیادی ندارند، اما حروف انگلیسی را میشناسند! به همین دلیل در اولین محل قرار گرفتنشان حرف a و در هر یک از قدمهای بعدی به ترتیب حروف الفبا را مینویسند. البته این گربهها بیشتر از ۲۵ قدم بر نمیدارند.
http://bayanbox.ir/id/8872882014512250453?view
میدانیم در ابتدا یک گربه در جنوبیترین و غربیترین مكان شهر قرار دارد. شما باید با دریافت نقشه شهر مشخص کنید که گربه چه حرفهایی را در چه مکانهایی خواهد نوشت.
ورودی
در سطر اول ورودی t نشان دهنده تعداد تستها آمده است. به ازای هر یک از t تست ورودی، شهر به صورت یک جدول n∗n تشریح شده است. به این صورت كه در سطر اول هر تست عدد $n نشان دهنده تعداد سطرها و ستونهای جدول میباشد. در n سطر بعدی در هر سطر n کاراکتر نوشته شده است که میتواند "-" یا "" باشد. وجود کاراکتر "-" در یک خانه بدین معنی است که گربه میتواند به این خانه برود و کاراکتر "" یعنی گربه نمیتواند به این خانه برود. در ابتدا گربه در خانه اول سطر n ام خوابیده است.
1≤t≤100
1≤n≤50
خروجی
به ازای هر تست، در جدول ورودی در هر خانهای كه گربه در آن حرفی مینویسد حرف نوشته شده را جایگزین كنید. سپس جدول را چاپ کنید.
ورودی نمونه
3
3
---
---
---
4
----
**--
----
----
3
---
**-
--*
خروجی نمونه
cde
b--
a--
--fg
**e-
bcd-
a---
---
**-
ab*
من این کد رو نوشتم و به ازای ورودی هایی که خود سوال داده بود و چندتا ورودی دیگه امتحان کردم ولی جاج میگه که اشتباهه
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
int main()
{
ifstream fin("input.txt");
ofstream fout("output.txt");
int t=0;
int a[100];
char nn[100][50][50]={0};
fin>>t;
for(int i=0;i<t;i++)
{
fin>>a[i];
char q;
for(int k1=0;k1<a[i];k1++)
for(int k2=0;k2<a[i];k2++)
{
fin>>q;
nn[i][k1][k2]=q;
}
}
for(int i=0;i<t;i++)
{
int a1=(a[i]-1),a2=0;
nn[i][a1][a2]='a';
int p=1;
while((nn[i][a1-1][a2]=='-' || nn[i][a1][a2+1]=='-' ) && (a1<a[i] && a2<a[i]))
{
if(nn[i][a1-1][a2]=='-')
a1--;
else if (nn[i][a1][a2+1]=='-')
a2++;
p++;
switch (p)
{
case 2: nn[i][a1][a2]='b';break;
case 3: nn[i][a1][a2]='c';break;
case 4: nn[i][a1][a2]='d';break;
case 5: nn[i][a1][a2]='e';break;
case 6: nn[i][a1][a2]='f';break;
case 7: nn[i][a1][a2]='g';break;
case 8: nn[i][a1][a2]='h';break;
case 9: nn[i][a1][a2]='i';break;
case 10: nn[i][a1][a2]='j';break;
case 11: nn[i][a1][a2]='k';break;
case 12: nn[i][a1][a2]='l';break;
case 13: nn[i][a1][a2]='m';break;
case 14: nn[i][a1][a2]='n';break;
case 15: nn[i][a1][a2]='o';break;
case 16: nn[i][a1][a2]='p';break;
case 17: nn[i][a1][a2]='q';break;
case 18: nn[i][a1][a2]='r';break;
case 19: nn[i][a1][a2]='s';break;
case 20: nn[i][a1][a2]='t';break;
case 21: nn[i][a1][a2]='u';break;
case 22: nn[i][a1][a2]='v';break;
case 23: nn[i][a1][a2]='u';break;
case 24: nn[i][a1][a2]='x';break;
case 25: nn[i][a1][a2]='y';break;
case 26: nn[i][a1][a2]='z';break;
}
}
for(int j1=0;j1<a[i];j1++)
{
for(int j2=0;j2<a[i];j2++)
fout<<nn[i][j1][j2];
fout<<endl;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
خیلی ممنون میشم اگه کد رو اصلاح کنین
توضیح کد:
متغیر t تعداد مجموعه های ورودی هست که میگیریم
آرایه [a[100 هم مقدار n رو مشخص میکنه که نشون میده جدول چند در چند هست (100 هم برای اینه که حداکثر 100 بار باید ورودی دریافت کنیم)
nn[100][50][50 هم که نشانه 100 تا جدول 50x50 هست که حداکثر مقدار دریافتی هست
حلقه for اولی که فقط ورودی هارو میگیره
حلقه for دومی هم که برای محاسبه هست و به ازای هر i (مجموعه ی ورودی های دریافتی که مقدارش حداکثر t هست) میاد اول از سمت پایین چپ جدول شروع میکنه(تعریف متغیر های a1 و a2 ) و توی خونه اول a رو مینویسه
متغیر p هم نشون میده که گربه توی چندمین حرکت خودش هست
یه حلقه while داره که بررسی میکنه اگه خونه بالا یا راست یکیشون باز بودن و از جدول هم بیرون نزدن میره توی حلقه
توی حلقه هم اول میبینه که بالایی بازه؟ اگه بود میره بالا و اگه نبود میره سمت راست
بعد به میبینه که توی حرکت چندم هستیم و طبق اون یه حرف رو قرار میده
آخرش هم جدول رو چاپ میکنه
فکر کنم واضح بوده توضیح
اگه نبوده هم بگید کجاش مبهمه
این سوالی هست که باید براش کد بزنم:
گربههای فضایی
دانشمندان فضایی دورترین سیارهی یافته شده را «سیاره دوردست» نامگذاری کردهاند. سیاره دوردست گربههای عجیبی دارد. این گربهها علاقه زیادی به حرکت به سمت شمال دارند. آنها وقتی صبح از خواب بیدار میشوند، سعی میكنند به سمت شمال قدم بردارند. هنگام قدم زدن به سمت شمال اگر مانعی جلوی قدم زدنشان را بگیرد، به سمت شرق حركت میكنند. بعد از هر قدم که به سمت شرق بر میدارند، اگر باز بتوانند به سمت شمال حرکت کنند، به سمت شمال میروند و در غیر این صورت به حرکتشان به سمت شرق ادامه میدهند. البته در شرایطی که حرکت به سمت شمال امکان پذیر نباشد و راهی هم برای رفتن به سمت شرق نداشته باشند، در همان محل متوقف میشوند.
این گربهها با اینكه هوش زیادی ندارند، اما حروف انگلیسی را میشناسند! به همین دلیل در اولین محل قرار گرفتنشان حرف a و در هر یک از قدمهای بعدی به ترتیب حروف الفبا را مینویسند. البته این گربهها بیشتر از ۲۵ قدم بر نمیدارند.
http://bayanbox.ir/id/8872882014512250453?view
میدانیم در ابتدا یک گربه در جنوبیترین و غربیترین مكان شهر قرار دارد. شما باید با دریافت نقشه شهر مشخص کنید که گربه چه حرفهایی را در چه مکانهایی خواهد نوشت.
ورودی
در سطر اول ورودی t نشان دهنده تعداد تستها آمده است. به ازای هر یک از t تست ورودی، شهر به صورت یک جدول n∗n تشریح شده است. به این صورت كه در سطر اول هر تست عدد $n نشان دهنده تعداد سطرها و ستونهای جدول میباشد. در n سطر بعدی در هر سطر n کاراکتر نوشته شده است که میتواند "-" یا "" باشد. وجود کاراکتر "-" در یک خانه بدین معنی است که گربه میتواند به این خانه برود و کاراکتر "" یعنی گربه نمیتواند به این خانه برود. در ابتدا گربه در خانه اول سطر n ام خوابیده است.
1≤t≤100
1≤n≤50
خروجی
به ازای هر تست، در جدول ورودی در هر خانهای كه گربه در آن حرفی مینویسد حرف نوشته شده را جایگزین كنید. سپس جدول را چاپ کنید.
ورودی نمونه
3
3
---
---
---
4
----
**--
----
----
3
---
**-
--*
خروجی نمونه
cde
b--
a--
--fg
**e-
bcd-
a---
---
**-
ab*
من این کد رو نوشتم و به ازای ورودی هایی که خود سوال داده بود و چندتا ورودی دیگه امتحان کردم ولی جاج میگه که اشتباهه
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
int main()
{
ifstream fin("input.txt");
ofstream fout("output.txt");
int t=0;
int a[100];
char nn[100][50][50]={0};
fin>>t;
for(int i=0;i<t;i++)
{
fin>>a[i];
char q;
for(int k1=0;k1<a[i];k1++)
for(int k2=0;k2<a[i];k2++)
{
fin>>q;
nn[i][k1][k2]=q;
}
}
for(int i=0;i<t;i++)
{
int a1=(a[i]-1),a2=0;
nn[i][a1][a2]='a';
int p=1;
while((nn[i][a1-1][a2]=='-' || nn[i][a1][a2+1]=='-' ) && (a1<a[i] && a2<a[i]))
{
if(nn[i][a1-1][a2]=='-')
a1--;
else if (nn[i][a1][a2+1]=='-')
a2++;
p++;
switch (p)
{
case 2: nn[i][a1][a2]='b';break;
case 3: nn[i][a1][a2]='c';break;
case 4: nn[i][a1][a2]='d';break;
case 5: nn[i][a1][a2]='e';break;
case 6: nn[i][a1][a2]='f';break;
case 7: nn[i][a1][a2]='g';break;
case 8: nn[i][a1][a2]='h';break;
case 9: nn[i][a1][a2]='i';break;
case 10: nn[i][a1][a2]='j';break;
case 11: nn[i][a1][a2]='k';break;
case 12: nn[i][a1][a2]='l';break;
case 13: nn[i][a1][a2]='m';break;
case 14: nn[i][a1][a2]='n';break;
case 15: nn[i][a1][a2]='o';break;
case 16: nn[i][a1][a2]='p';break;
case 17: nn[i][a1][a2]='q';break;
case 18: nn[i][a1][a2]='r';break;
case 19: nn[i][a1][a2]='s';break;
case 20: nn[i][a1][a2]='t';break;
case 21: nn[i][a1][a2]='u';break;
case 22: nn[i][a1][a2]='v';break;
case 23: nn[i][a1][a2]='u';break;
case 24: nn[i][a1][a2]='x';break;
case 25: nn[i][a1][a2]='y';break;
case 26: nn[i][a1][a2]='z';break;
}
}
for(int j1=0;j1<a[i];j1++)
{
for(int j2=0;j2<a[i];j2++)
fout<<nn[i][j1][j2];
fout<<endl;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
خیلی ممنون میشم اگه کد رو اصلاح کنین
توضیح کد:
متغیر t تعداد مجموعه های ورودی هست که میگیریم
آرایه [a[100 هم مقدار n رو مشخص میکنه که نشون میده جدول چند در چند هست (100 هم برای اینه که حداکثر 100 بار باید ورودی دریافت کنیم)
nn[100][50][50 هم که نشانه 100 تا جدول 50x50 هست که حداکثر مقدار دریافتی هست
حلقه for اولی که فقط ورودی هارو میگیره
حلقه for دومی هم که برای محاسبه هست و به ازای هر i (مجموعه ی ورودی های دریافتی که مقدارش حداکثر t هست) میاد اول از سمت پایین چپ جدول شروع میکنه(تعریف متغیر های a1 و a2 ) و توی خونه اول a رو مینویسه
متغیر p هم نشون میده که گربه توی چندمین حرکت خودش هست
یه حلقه while داره که بررسی میکنه اگه خونه بالا یا راست یکیشون باز بودن و از جدول هم بیرون نزدن میره توی حلقه
توی حلقه هم اول میبینه که بالایی بازه؟ اگه بود میره بالا و اگه نبود میره سمت راست
بعد به میبینه که توی حرکت چندم هستیم و طبق اون یه حرف رو قرار میده
آخرش هم جدول رو چاپ میکنه
فکر کنم واضح بوده توضیح
اگه نبوده هم بگید کجاش مبهمه