در صورتی که با سبک برگزاری مسابقات برنامه نویسی و به خصوص مسابقات برنامهنویسی بیان آشنا نیستید، بهتر است سعی کنید تعدادی سوال تمرینی حل کنید تا در زمان مسابقه بتوانید سرعت عمل بیشتری داشته باشید.
در ادامه روند ارسال پاسخ در مسابقات برنامه نویسی بیان و همچنین چند سوال بسیار ساده برای تمرین آورده شده است:
روند ارسال پاسخ
ارسال پاسخ در مسابقات برنامهنویسی بیان به سبک فقط خروجی (Output Only) است. یعنی شما بعد از پیاده سازی کد برنامه برای حل سوال و تست آن با ورودی و خروجی های نمونه، باید با اجرای برنامهی خود بر روی یک ورودی مشخص، خروجی آن را به دست آورید.
برای این کار، مراحل زیر را انجام دهید.
۱. در صفحهی سوال مورد نظر، در قسمت «ارسال» کلیک کنید. با این کار یک فایل با پسوند ".in" در مرورگر شما دانلود میشود که فایل ورودی مساله است.
۲. محتویات این فایل را به عنوان ورودی به برنامهی خود بدهید و خروجی برنامهی خود را در یک فایل دیگر ذخیره کنید (برای آشنایی بیشتر با کار با فایل به نکات مطرح شده در ادامه نیز توجه کنید).
۳. در صفحهی سوال مورد نظر، فایل خروجی ذخیره شده را به همراه کد برنامهی خود آپلود و ارسال کنید.
شما پس از دریافت یک ورودی تنها چند دقیقه برای اجرای برنامه و ارسال فایل خروجی فرصت دارید. در صورتی که نتوانید در این مدت فایل خروجی را ارسال کنید، یک تلاش ناموفق برای شما ثبت خواهد شد.
دقت کنید که در هر بار دانلود فایل ورودی، یک نمونه ورودی متفاوت به شما داده میشود و بنابراین در صورتی که یک ارسال ناموفق داشته اید، میبایست برنامهی خود را بر روی ورودی دیگری که دریافت میکنید مجدداً اجرا نمایید.
چند نکته در حل مسالهها
اگر شما در محیط shell یا command prompt یا cygwin برنامه خود را اجرا کنید کار با فایل خیلی ساده است. شما فقط کافیست برنامه خود را با ورودی و خروجی استاندارد بنویسید و پس از کامپایل برنامه خود فایل اجرایی آن را به صورت زیر اجرا کنید.
به عنوان مثال فرض کنید کد برنامه شما فایل p1.c باشد و فایل کامپایل شده آن p1.exe باشد. حال اگر شما بخواهید برنامه شما از فایل p1.in به عنوان ورودی بخواند کافیست دستور زیر را در command بزنید:
p1.exe < p1.in
حالا اگر بخواهید برنامه شما از فایل ورودی p1.in بخواند و خروجی خود را در فایل p1.out بریزد دستور زیر را بزنید
p1.exe < p1.in > p1.out
کار در محیط Visual Studio
کسانی که در محیطهایی شبیه به Visual Studio هم کار می کنند، می توانند به شیوه ای که گفته شده فایل اجرایی برنامه خود را در محیط shell یا command prompt اجرا کنند و فایل ورودی و خروجی را به آن می دهید.
ولی اگر حتما می خواهید از محیط Visual Studio خارج نشوید به صورت زیر کار کنید:
۱- فایل ورودی را در کنار فایل برنامه خود قرار دهید. یا در محیط Visual Studio در کنار فایل یک فایل ایجاد کنید و محتویات فایل ورودی را در آن بریزید.
۲- با روش گفته شده در مثالهای زیر به طور صریح از فایل خوانده یا در فایل بنویسند.
در زیر مثالهای خواندن و نوشتن در فایل در زبان های سی و جاوا و پایتون قرار داده شده است:
خواندن و نوشتن صریح در فایل : سی پلاس پلاس، جاوا , پایتون
Python
import string input_reader = open('input.txt','r'); output_writer = open('output.txt','w'); input_list = string.split(input_reader.next()) a = int(input_list[0]); b = int(input_list[1]); output_writer.write(str(a+b)+"\n");
Java
import java.util.*; import java.io.*; public class read_write{ public static void main(String args[])throws Exception{ Scanner inputReader = new Scanner(new File("input.txt")); PrintWriter outputWriter = new PrintWriter(new File("output.txt")); int a = inputReader.nextInt(); int b = inputReader.nextInt(); outputWriter.println(a+b); outputWriter.close(); } }
C++
#include <cstdio> #include <iostream> #include <fstream> using namespace std; int main(){ ifstream fin("input.txt"); ofstream fout("output.txt"); int a,b; fin>>a>>b; fout<<a+b<<endl; }
کار با VB6
کسانی که با VB6 برنامه نویسی می کنند حتما باید مستقیم از فایل ورودی بخوانند و در فایل خروجی بنویسند. برای راهنمایی بیشتر، پاسخ سوالات مسابقه تمرینی با VB6 هم نوشته شده است که می توانید آنها را در لینک انتهای هر سوال واقع در بالای همین صفحه دانلود کنید.
همچنین توجه داشته باشید برای خواندن سطر به سطر فایلهای متنی، دستورات استاندارد VB6 دو حالت (Cr (\r و (CrLf (\r\n را به عنوان انتهای سطر (end-of-line) قبول می کنند اما در تمام فایل های ورودی مسابقه، (Lf (\n مشخص کننده انتهای سطر می باشد. به همین دلیل شما با دستور Line Input نمی توانید سطر به سطر فایلهای ورودی مسابقه را بخوانید. برای رفع این موضوع یک procedure ساده با VB6 نوشته شده است که فایل ورودی را گرفته و آن به شکل مناسب ذخیره می کند. کافیست این procedure را در ابتدای برنامه خود قرار دهید و نام فایل ورودی را به آن ارسال کنید.
برای جزئیات بیشتر پاسخ سوالات مسابقه آزمایشی که با VB6 نوشته شده را مشاهده نمایید.
سوالات تمرینی
جمع دو عدد
برنامه ای بنویسید که ۲ عدد از ورودی گرفته و جمع آنها را چاپ کند.
ورودی مساله:
در خط اول فایل ورودی یک عدد قرار دارد( )که مشخص کننده ی تعداد جمع هایی است که باید انجام شود. در خط بعدی هر کدام دو عدد و وجود دارد که باید با یک دیگر جمع شوند.
خروجی مساله:
به ازای هر دو عدد و حاصل جمع و را در یک خط جداگانه چاپ نمایید.
ورودی و خروجی مثال:
مثال خروجی | مثال ورودی |
4 3 |
2 3 1 1 2 |
پاسخ:
پاسخ به زبانهانهای سیپلاسپلاس، پاسکال، جاوا ، پایتون ، سی شارپ و ویژوال بیسیک 6
Python
n = int(raw_input()) for i in range(n): a, b = [int(x) for x in raw_input().split(" ")] print("%s" % (a+b))
Java
import java.util.*; import java.io.*; public class Solution{ public static void main(String args[]){ Scanner cin = new Scanner(System.in); int n=cin.nextInt(); for (int i=0;i<n;i++){ int a,b; a=cin.nextInt(); b=cin.nextInt(); System.out.println(a+b); } } }
VB6
Attribute VB_Name = "Add" Option Explicit Sub Main() Const DataPath As String = "C:\BayanContest\Practice1-Add\" Const InputFile As String = DataPath & "problem1.in" Const OutputFile As String = DataPath & "problem1.out" ConvertNewLineInFile InputFile Dim i As Long, count As Long, a As Long, b As Long Open InputFile For Input As #1 Open OutputFile For Output As #2 Input #1, count For i = 1 To count Input #1, a, b Print #2, CStr(a + b) Next Close End Sub ' Changes all EOL (end-of-line) to CrLf. for more information visit: http://en.wikipedia.org/wiki/Newline Public Sub ConvertNewLineInFile(ByVal FileName As String) Dim FileNum As Integer FileNum = FreeFile Dim Buffer As String On Error GoTo ConvertNewLineInFile_Error Open FileName For Binary Access Read Write As FileNum Buffer = String(LOF(FileNum), 0) Get FileNum, , Buffer Buffer = Replace(Buffer, vbLf, vbCr) Buffer = Replace(Buffer, vbCr & vbCr, vbCr) Buffer = Replace(Buffer, vbCr & vbCr, vbCr) Buffer = Replace(Buffer, vbCr, vbCrLf) Put FileNum, 1, Buffer ConvertNewLineInFile_Error: Close FileNum End Sub
C#
using System; using System.IO; namespace test { class Program { static StreamReader streamReader = new StreamReader("..//..//problem.in"); static StreamWriter streamWriter = new StreamWriter("..//..//problem.out"); static int n = int.Parse(streamReader.ReadLine()); static void Main(string[] args) { // Program.exe runs from [your_source_code_location]\bin\Debug // So problem.in and problem.out in near your source code try{ Program1(); } finally { streamReader.Close(); streamWriter.Close(); } } static void Program1() { for (int i = 0; i < n; i++) { string line = streamReader.ReadLine(); string[] numbers = line.Split(' '); int sum = int.Parse(numbers[0]) + int.Parse(numbers[1]); streamWriter.WriteLine(sum); } } } }
Pascal
program ans; var n,a,b,i: integer; begin readln(n); for i := 1 to n do begin readln(a, b); writeln(a+b); end; end.
C++
#include <iostream> using namespace std; int main(){ int n,a,b; cin>>n; for (int i=0;i<n;i++){ cin>>a>>b; cout<<a+b<<endl; } }
حرف نقرهای
حرف نقرهای در یک کلمه، حرفی است که فاصله آن از دو طرف رشته مساوی باشد. مثلا در کلمه ALI ، حرف L حرف نقره ای است، چون فاصله آن از دو طرف است. ولی کلمه SARA حرف نقره ای ندارد، چون حرفی را نمی توان پیدا کرد که فاصله آن از دو طرف برابر باشد
به شما یک رشته داده شده ، شما باید ابتدا تعداد حرف های آن رشته را به دست بیاورید و چاپ کنید. در صورتی که این رشته دارای حرف نقره ای است باید آن را چاپ کنید و در غیر این صورت باید به ترتیب دو حرف کنار همی را چاپ کنید که اگر هر کدام از آن ها را از رشته حذف کنیم حرف دیگر حرف نقره ای شود.
ورودی مساله:
در خط اول فایل ورودی عدد تعداد تست های ورودی را نشان میدهد( ). در خط بعدی، در هر خط یک کلمه قرار گرفته است.
خروجی مساله:
به ازای هر تست، پاسخ سوال را در یک خط جداگانه چاپ کنید
ورودی و خروجی مثال:
مثال خروجی | مثال ورودی |
6 jl 5 v |
2 ywjlbi apvsk |
پاسخ:
پاسخ به زبانهانهای سیپلاسپلاس، پاسکال، جاوا، پایتون ، سی شارپ، ویژوال بیسیک 6 و پی اچ پی
Python
n = int(raw_input()) for i in range(n): s = raw_input() l = len(s) if l % 2: m = s[(l - 1)/2] else: m = s[l/2 - 1:l/2 + 1] print("%s %s" % (l,m))
Java
import java.util.*; import java.io.*; public class Solution{ public static void main(String args[]){ Scanner cin = new Scanner(System.in); int n=cin.nextInt(); for (int i=0;i<n;i++){ String a = cin.next(); System.out.print(a.length()+" "); if (a.length() % 2 != 0) System.out.println(a.charAt(a.length()/2)); else System.out.println(a.charAt(a.length()/2-1)+""+a.charAt(a.length()/2)); } } }
C++
#include <iostream> using namespace std; int main(){ int n; cin>>n; for (int i=0;i<n;i++){ string a; cin>>a; cout<<a.size()<<' '; if (a.size() %2) cout<<a[a.size()/2]<<endl; else cout<<a[a.size()/2-1]<<a[a.size()/2]<<endl; } }
Pascal
program ans; var s, m: AnsiString; l: Integer; i, n: Integer; begin readln(n); for i := 1 to n do begin readln(s); l := length(s); write(l); write(' '); if l mod 2 = 0 then m := s[l div 2] + s[(l div 2) + 1] else m := s[(l+1) div 2]; writeln(m); end; end.
C#
using System; using System.IO; namespace test { class Program { static StreamReader streamReader = new StreamReader("..//..//problem.in"); static StreamWriter streamWriter = new StreamWriter("..//..//problem.out"); static int n = int.Parse(streamReader.ReadLine()); static void Main(string[] args) { // Program.exe runs from [your_source_code_location]\bin\Debug // So problem.in and problem.out in near your source code try{ Program2(); } finally { streamReader.Close(); streamWriter.Close(); } } static void Program2(int n){ for (int i = 0; i < n; i++) { string name = streamReader.ReadLine().Trim(); int k = name.Length / 2; string silverChar = name[name.Length / 2].ToString(); if (name.Length % 2 == 0) { silverChar = name[name.Length / 2 - 1] + silverChar; } streamWriter.WriteLine("{0} {1}", name.Length, silverChar); } } } }
VB6
Attribute VB_Name = "SilverLetter" Option Explicit Sub Main() Const DataPath As String = "C:\BayanContest\Practice2-SilverLetter\" Const InputFile As String = DataPath & "problem2.in" Const OutputFile As String = DataPath & "problem2.out" ConvertNewLineInFile InputFile Dim i As Integer, count As Integer, s As String, l As Integer Open InputFile For Input As #1 Open OutputFile For Output As #2 Input #1, count For i = 1 To count Line Input #1, s l = Len(s) Print #2, CStr(l) + " " + Mid(s, l \ 2 + (l Mod 2), IIf(l Mod 2 <> 0, 1, 2)) Next Close End Sub ' Changes all EOL (end-of-line) to CrLf. for more information visit: http://en.wikipedia.org/wiki/Newline Public Sub ConvertNewLineInFile(ByVal FileName As String) Dim FileNum As Integer FileNum = FreeFile Dim Buffer As String On Error GoTo ConvertNewLineInFile_Error Open FileName For Binary Access Read Write As FileNum Buffer = String(LOF(FileNum), 0) Get FileNum, , Buffer Buffer = Replace(Buffer, vbLf, vbCr) Buffer = Replace(Buffer, vbCr & vbCr, vbCr) Buffer = Replace(Buffer, vbCr & vbCr, vbCr) Buffer = Replace(Buffer, vbCr, vbCrLf) Put FileNum, 1, Buffer ConvertNewLineInFile_Error: Close FileNum End Sub
PHP
<?php $file_name = 'input.in'; $file_contents = file_get_contents($file_name); $lines = explode("\n", $file_contents); $t = intval($lines[0]); for($i = 1; $i <= $t; $i++) { $line = trim($lines[$i]); $len = strlen($line); echo $len.' '; if ($len % 2) echo substr($line, $len / 2, 1); else echo substr($line, $len / 2 - 1, 2); echo "\n"; }
- ۹۳/۰۶/۰۶