ACM

msmiran

عضو جدید
سلام
يكي بگه اينACM چيه كه همه در موردش بحث مي كنند ؟ :surprised:

مسابقه بین المللی برنامه نویسی دانشگاهی.یه مسابقه است که مغزای برنامه نویسی توی اون شرکت میکنند و پشتیبانش هم شرکت IBM است.
سایت رسمی:
کد:
http://icpc.baylor.edu/icpc
 

RED-C0DE

عضو جدید
سوال 11233 سایت UVA

سوال 11233 سایت UVA

سوال 11233 سایت UVA :

دانلود PDF سوال(صورت سوال به همراه ترجمه فارسی)


2007/2008 ACM International Collegiate Programming Contest
University of Ulm Local Contest

Deli Deli


خانم دِلی فروشگاه اغذیه "Deli Deli" را اداره می کند. پارسال خانم دلی تصمیم گرفت تا کار و بارش رو توسعه دهد و یک فروشگاه آنلاین برپا کند. او یک برنامه نویس را اجاره کرد تا فروشگاه آنلاین راه بیاندازد.

قبلا چند تا از مشتری های آنلاین جدید خانم دلی در مورد صورتحسابهای الکترونیکی شکایت کرده بودند. آن برنامه نویس فراموش کرده بود زمانی که یک آیتم چند بار خریده می شود از شکل جمع اسامی استفاده کند. متاسفانه برنامه نویس خانم دلی در تعطیلات است و اکنون وظیفه شماست تا این ویژگی را برای خانم دلی پیاده کنید. در زیر توضیحاتی برای ساختن شکل جمع مشاهده می کنید :

1. اگر کلمه در لیست کلمات غیرمجاز باشد ، باید با شکل جمع خود جایگزین شود.
2. در غیر اینصورت اگر کلمه با یک حرف بی صدا به همراه "y" ختم شود، "y" با "ies" جایگزین می شود.
3. در غیر اینصورت اگر کلمه با یکی از "o" , "s" , "ch" , "sh" یا "x" به پایان برسد ، "es" به آخر آن اضافه می شود.
4. در غیر اینصورت "s" به آخر کلمه اضافه می شود.

توضیحات ورودی

خط اول ورودی شامل دو عدد integer می باشد L , N (0<= L <=20 , 1<= N <=100) . سپس L خط بعدی شامل توضیحات کلمات غیر مجاز و شکل جمع آنها می باشند. هر خط شامل دو کلمه که با کارکتر فاصله از هم جدا شده اند می باشد ، که کلمه اول به حالت مفرد و کلمه دوم شکل جمع آن می باشد. بعد از لیست کلمات غیر مجاز ، N خط بعدی هرکدام شامل یک کلمه می باشد، که شما باید شکل جمع آنها را بسازید. می توانید فرض کنید هر کلمه شامل حداکثر 20 کارکتر حروف کوچک الفبای انگلیسی می باشد (از 'a' تا 'z').

توضیحات خروجی

شما باید N خط در خروجی چاپ کنید ، که i امین خط ، شکل جمع برای i امین کلمه ورودی می باشد.


ورودی نمونه

7 3
rice rice
spaghetti spaghetti
octopus octopi
rice
lobster
spaghetti
strawberry
octopus
peach
turkey
خروجی نمونه

lobsters
spaghetti
strawberries
octopi
peaches
turkeys

---------

2007/2008 ACM International Collegiate Programming Contest
University of Ulm Local Contest

Problem D: Deli Deli

Mrs. Deli is running the delicatessen store "Deli Deli". Last year Mrs. Deli has decided to expand her business and build up an online store. She has hired a programmer who has implemented the online store.

Recently some of her new online customers complained about the electronic bills. The programmer had forgotten to use the plural form in case that an item is purchased multiple times. Unfortunaly the programmer of Mrs. Deli is on holiday and now it is your task to implement this feature for Mrs. Deli. Here is a description how to make the plural form:

1. If the word is in the list of irregular words replace it with the given plural.
2. Else if the word ends in a consonant followed by "y", replace "y" with "ies".
3. Else if the word ends in "o", "s", "ch", "sh" or "x", append "es" to the word.
4. Else append "s" to the word.

Input Specification

The first line of the input consists of two integers L and N (0 ≤ L ≤ 20, 1 ≤ N ≤ 100). The following L lines contain the description of the irregular words and their plural form. Each line consists of two words separated by a space character, where the first word is the singular, the second word the plural form of some irregular word. After the list of irregular words, the following N lines contain one word each, which you have to make plural. You may assume that each word consists of at most 20 lowercase letters from the english alphabet ('a' to 'z').

Output Specification

Print N lines of output, where the ith line is the plural form of the ith input word.

Sample Input

3 7
rice rice
spaghetti spaghetti
octopus octopi
rice
lobster
spaghetti
strawberry
octopus
peach
turkey

Sample Output

rice
lobsters
spaghetti
strawberries
octopi
peaches
turkeys​
 

msmiran

عضو جدید
دستتون درد نکنه.
توی ACM از این سوالها هم میدن؟
این که خیلی ساده است.
یه دو سه روز دیگه میزنمش تا بقیه دوستان هم روش فکر کنند.;)
--------------------------
یه سوال فنی:
من یه آرایه معرفی میکنم تا دو عدد رو بخونه.وقتی میخوام دو عدد جداگانه رو توی یک خط چاپ کنم مثلا 32 37 که این دو در دو خانه آرایه به طور جداگانه قرار بگیرند برنامه خطا میگیره.(مثل همین آخری که نوشتم نتونستم کاری کنم که اعداد توی یه خط وارد بشند.)
 

RED-C0DE

عضو جدید
توی ACM از این سوالها هم میدن؟
این که خیلی ساده است.
خوب هر کی در حد وسعش می تونه سوال حل کنه...ما هم تازه اول راهیم دیگه...:smile:

اگه مشکلی نباشه منم کد خودم رو برای سوال اول (Ancient keyboard) اینجا می ذارم لطفا راهنمایی کنید اگه مشکلی هست...اصلا درست جواب می ده؟
کد:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream cin("A.in");
//    ofstream cout("test.out");
    int T,N;
    cin >> T;
    while(T--)
    {
        int arr[1000]={0},a,b,mx=-1;
        char ch;

        cin >> N;
        for(int n=0; n<N; n++)
        {
            cin >> ch >> a >> b;
            mx = b>mx ? b : mx;
            for(;a<b; a++)
                arr[a]++;
        }

        for(int i=0; i<mx; i++)
            if(arr[i])
                cout << ((char)(arr[i] -1 + 'A')) ;
        cout << endl;
    }

    return 0;
}

ممنون...
 

msmiran

عضو جدید
خوب هر کی در حد وسعش می تونه سوال حل کنه...ما هم تازه اول راهیم دیگه...:smile:

اگه مشکلی نباشه منم کد خودم رو برای سوال اول (Ancient keyboard) اینجا می ذارم لطفا راهنمایی کنید اگه مشکلی هست...اصلا درست جواب می ده؟
کد:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream cin("A.in");
//    ofstream cout("test.out");
    int T,N;
    cin >> T;
    while(T--)
    {
        int arr[1000]={0},a,b,mx=-1;
        char ch;

        cin >> N;
        for(int n=0; n<N; n++)
        {
            cin >> ch >> a >> b;
            mx = b>mx ? b : mx;
            for(;a<b; a++)
                arr[a]++;
        }

        for(int i=0; i<mx; i++)
            if(arr[i])
                cout << ((char)(arr[i] -1 + 'A')) ;
        cout << endl;
    }

    return 0;
}
ممنون...

من تعجبم از این بود که این سوال نسبت به سوال جنگل و بحران نیرو یه دنیا تفاوت داشته.حتی نسبت به Ancient keyboard.
------------------------
من که چیزی از C++ سر در نمیارم.
 

RED-C0DE

عضو جدید
من تعجبم از این بود که این سوال نسبت به سوال جنگل و بحران نیرو یه دنیا تفاوت داشته.حتی نسبت به Ancient keyboard.
------------------------
من که چیزی از C++ سر در نمیارم.

منظورت رو متوجه نشدم...
این کدی که من فرستادم با C++ مربوط به سوال Ancient Keyboard هست...مشکلش چیه؟
یعنی چی یه دنیا تفاوت داره!!!:surprised:
 

RED-C0DE

عضو جدید
منم این کد رو برای سوال Power Crisis نوشتم :


کد:
//uva 151 by RED-C0DE 
#include <iostream>
//#include <fstream>
using namespace std;

struct node
{
    int val;
    node * next;
    node * prev;
};

void make_List(node * p, int n)
{
    p->val= 2;
    node * tmp= p;
    for(int i=3; i<=n; i++)
    {
        tmp->next = new node();
        tmp->next->prev = tmp;
        tmp =tmp->next;
        tmp->val = i;
    }
    tmp->next = p;
    p->prev = tmp;
}

int main()
{
    //ifstream cin("test.in");
    int N;
    while(cin >> N && N)
    {
        if(N==13)
        {
            cout << 1 << endl;
            continue;
        }

        node * head = new node();
        make_List(head,N);

        int m=2;
        while(1)
        {
            for(int i=1; i<m; i++)
                head= head->next;
            
            if(head->next == head )
            {
                if(head->val ==13)
                {
                    cout << m << endl;
                    break;
                }
                else
                {
                    m++;
                    make_List(head,N);
                }
            }
            else
            {
                node * tmp= head;
                head->prev->next = head->next;
                head->next->prev = head->prev;
                head = NULL;
                head = tmp->next ;
            }
        }
    }

    return 0;
}
 

msmiran

عضو جدید
منظورت رو متوجه نشدم...
این کدی که من فرستادم با C++ مربوط به سوال Ancient Keyboard هست...مشکلش چیه؟
یعنی چی یه دنیا تفاوت داره!!!:surprised:

نه در مورد برنامه شما نگفتم.در مورد کدهای C++ گفتم.
میتونید در مورد برنامه ای که نوشتین یه کم توضیح بدین.
مثلا نوشتن T-- در حلقه While درسته و حلقه تموم میشه؟چون در هر مرحله فقط یکی از T کم میکنه.در حالی که توی While باید یه شرط باشه.یا return 0 رو برای چی نوشتین؟return که برای بازگشت یک مقدار به خروجی تابع است ولی اینجا تابعی وجود نداره.
اگه برنامه اجرایی رو قرار بدید خیلی بهتره.


------------------------------------------------------
کسی از دوستان میتونه در مورد خواندن از فایل و نوشتن در فایل کمی برام توضیح بده.
 

RED-C0DE

عضو جدید
الگوریتمی که من به ذهنم رسید : زمان ما از 0 تا 1000 هست و ممکنه در این بازه 0تا ، یکی یا چند تا LED روشن باشه...من اومدم برای هر a,b که از ورودی می خونم ، توی این بازه (بین a,b) مقادیر داخل آرایه ام (arr) رو یکی اضافه می کنم...
آرایه ام در ابتدا به اینصورت است :
0,0,0,0,0,0,0,0,0,0,0,0,0,0,...

مثلا توی تست کیس اولی ما دوتا بازه داریم ، یکی از 2 تا 6 و یکی از 4 تا 9 که در نتیجه ما یک بازه مشترک بین این دو داریم ، یعنی از 4 تا 6 ...خوب من اولین a,b رو که می خونم (2و6) توی یک حلقه می یام و مقادیر بین این دو رو در آرایه یکی اضافه می کنم...در نتیجه آرایم به این صورت می شه :
(از سمت چپ بخونید ...اندازه آرایه 1000 تا است و از 0 شروع می شه اندیسها)
0,0,1,1,1,1,0,0,0,0,0,0,0,0,...

یعنی خونه های 2و3و4و5و6 برابر با 1 می شن...حالا a,b بعدی (4و9) رو می خونم و توی آرایه ام از 4 تا 9 رو یکی اضافه می کنم که در نتیجه به اینصورت می شه :
0,0,1,1,2,2,1,1,1,0,0,0,0,0,0,...

خوب کار تمومه...حالا توی آرایم حرکت می کنم و جاهایی که غیر از 0 هستند رو باید چاپ کنم اما باید کارکتر معادلش رو چاپ کنم...
کد:
cout << ((char)(arr[i] -1 + 'A')) ;
این خط اینکار رو انجام میده...چون آرایم نوع عددی است باید با کرکتر 'A' (یعنی 65 تا) جمعش کنم تا درست بشه و گذاشتن (char) پشتش باعث می شه که بصورت کرکتری چاپ کنه (casting) و نه بصورت عددی...


کسی از دوستان میتونه در مورد خواندن از فایل و نوشتن در فایل کمی برام توضیح بده.
با همین برنامه می تونین با نحوه کار کردن با فایلها در C++ آشنا بشین...

کد:
//Ancient keyboard - sharif 2005
#include <iostream>
#include <fstream> کتابخانه fstream برای کار کردن با فایلها 
using namespace std;

int main()
{
    ifstream cin("A.in");  به اینصورت استفاده می کنم...از این به بعد توی تابع main هر جا که cin استفاده کنم یعنی داره از فایل می خونه ifstream برای اینکه بتونم توی برنامم از یک فایل بصورت ورودی استفاده کنم از، 

    ofstream cout("test.out");    تمام چیزایی که برای ifstream گفته شد برای ofstream هم صادقه و در اینجا cout رو یک نوع فایل خروجی تعریف کردم تا بتونم توش بنویسم...هر جا که cout استفاده کردم یعنی توی فایل بنویس

    int T,N;
    cin >> T;     تعداد تست کیسا رو می خونه
    while(T--)    این حلقه هر دفعه مقدار T رو یکی کم می کنه تا به صفر برسه که در اونصورت می یاد بیرون
    {
        int arr[1000]={0},a,b,mx=-1;
        char ch;
...
...
 
آخرین ویرایش:

msmiran

عضو جدید
ایده من برای حل مسئله Deli Deli:
یه آرایه دو بعدی L در 2 تعریف میکنیم که برای نوشتن شکل جمع کلمات خاص هست.ستون اول خود کلمات و ستون دوم شکل جمع آنها.به یک آرایه تک بعدی به طول N تعریف میکنیم که کلماتی که قراره شکل جمعشون نوشته بشه توی اون قرار میگیرند.در یک مرحله با چند شرط شکل جمع اونا رو مینویسیم.یعنی اول چک میکنیم اگه توی ستون اول آرایه مربوط به کلمات خاص بود کلمه موجود در ستون دوم همان سطر را چاپ میکنیم.در غیر این صورت به سراغ سایر حالتها میریم.
 
آخرین ویرایش:

msmiran

عضو جدید
کد:
static void Mobadel(string Word)
        {
            char[] Sedadar = { char.Parse("a"), char.Parse("i"), char.Parse("o"), char.Parse("u"), char.Parse("e") };
            int k;
            bool found = false ;
            char[] Tempword = Word.ToCharArray();
            int a = Word.Length;
            if (Tempword[a - 1] == char.Parse("y"))
            {
                found = false ;
                for (k = 0; k < 5; k++)
                    if (Tempword[a - 2] == Sedadar[k])
                        found = true;
                if (found == true)
                {
                    for (k = 0; k < a; k++)
                        Console.Write(Tempword[k]);
                    Console.Write("s");
                }
                else
                {
                    for (k = 0; k < a-1; k++)
                        Console.Write(Tempword[k]);
                    Console.Write("ies");
                }
            }
            else if ((Tempword[a - 1] == char.Parse("h") && (Tempword[a - 2] == char.Parse("c") || Tempword[a - 2] == char.Parse("s")))

              || Tempword[a - 1] == char.Parse("s") || Tempword[a - 1] == char.Parse("o")
                || Tempword[a - 1] == char.Parse("x"))
            {
                for (k = 0; k < a; k++)
                    Console.Write(Tempword[k]);
                Console.Write("es");
            }
            else
            {
                for (k = 0; k < a; k++)
                    Console.Write(Tempword[k]);
                Console.Write("s");
            }
            Console.WriteLine();

        }
        static void Main(string[] args)
        {
            string[,] Special;
            string[] Words;
            int i, j;
            int N, L;
            Console.WriteLine("Please Enter L:");
            while (true)
            {
                L = Int32.Parse(Console.ReadLine());
                if (1 <= L && L <= 20)
                    break;
                else
                    Console.WriteLine("Please Enter L between 1 and 20:");
            }
            Console.WriteLine("Please Enter N:");
            while (true)
            {
                N = Int32.Parse(Console.ReadLine());
                if (1 <= N && N <= 100)
                    break;
                else
                    Console.WriteLine("Please Enter L between 1 and 100:");
            }

            Console.WriteLine("Please Enter Special Words:");
            Special = new string[L, 2];
            Words = new string[N];
            for (i = 0; i < L; i++)
            {
                Console.Write("Word: ");
                Special[i, 0] = Console.ReadLine();
                Console.Write("Shekle Jam: ");
                Special[i, 1] = Console.ReadLine();
            }
            Console.WriteLine("Enter Words:");
            for (i = 0; i < N; i++)
                Words[i] = Console.ReadLine();

            Console.WriteLine();

            for (i = 0; i < N; i++)
            {
                for (j = 0; j < L; j++)
                    if (Words[i] == Special[j, 0])
                    {
                        Console.WriteLine(Special[j, 1]);
                        break;
                    }
                    else
                    {
                        Mobadel(Words[i]);
                        continue;
                    }

            }
        }
 

itse

عضو جدید
سلام

سلام

درایه های یک ماتریس 5x6 را از ورودی گرفته
الف)میانگین درایه های هر سطر را چاپ کند
ب)" " " هر ستون " " "
ج)بزرگترینمقدار هر سطر را چاپ کند
د) " " " " هر ستون " " " "
نکته : به کمک تابع حل شوذ;):)
 

abc_ramak

عضو جدید
کاربر ممتاز
درایه های یک ماتریس 5x6 را از ورودی گرفته
الف)میانگین درایه های هر سطر را چاپ کند
ب)" " " هر ستون " " "
ج)بزرگترینمقدار هر سطر را چاپ کند
د) " " " " هر ستون " " " "
نکته : به کمک تابع حل شوذ;):)

ممنون که توی بحث ما شرکت کردی :gol:
مطمئنی این سوال ACM هست؟ :razz:
 

RED-C0DE

عضو جدید
درایه های یک ماتریس 5x6 را از ورودی گرفته
الف)میانگین درایه های هر سطر را چاپ کند
ب)" " " هر ستون " " "
ج)بزرگترینمقدار هر سطر را چاپ کند
د) " " " " هر ستون " " " "
نکته : به کمک تابع حل شوذ;):)

احتمالا این یک تمرین درسی که نیست؟!؟!؟

اینم کد من برای Deli Deli :
کد:
//uva#11233 "Deli Deli" ~ C0DED by RED-C0DE
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
//#include <fstream>
using namespace std;
int main() 
{
    //ifstream cin("test.in");
    int L , N;
    string irregular , plural , word;
    string vowels = "aeiou";

    while(cin >> L >> N)
    {
        map <string , string> mp;

        for(int l=0; l<L; l++)
        {
            cin >> irregular >> plural;
            mp[irregular] = plural;
        }

        for(int n=0; n<N; n++)
        {
            cin >> word;
            //rule#1 :
            if(mp[word]!="")
            {
                cout << mp[word] << endl;
                continue;
            }

            size_t sz = word.size();
            //rule#2 : vowels + y > ies :
            if(sz>=2 && (vowels.find(word[sz-2])==-1) && word[sz-1]=='y')
            {
                word[sz-1]= 'i';
                word+= "es";                
            }
            //rule#3 :
            else if(sz>=2 && ( (word[sz-2]=='c' && word[sz-1]=='h') || ((word[sz-2]=='s' && word[sz-1]=='h')) ))
                word += "es";                
            else if(word[sz-1] =='o' || word[sz-1]=='s' || word[sz-1]=='x')
                word += "es";            
            //rule#4 :
            else            
                word+="s";

            cout << word << endl;
        }
    }
    return 0;
}

پیشنهاد می کنم به دوستان علاقه مند، توی سایت uva و همینطور TopCoder عضو بشن و به حل سوالای مختلف بپردازن...می تونین برای هزاران سوالی که در این سایتها هست کد بنویسین و براشون بفرستین تا نتیجه اش رو براتون بفرستن...
سایتهای زیادی از اینکارا می کنن (Online Judge) که این دو تا از معروفترینهاشون هستن...
البته یه جورایی با هم فرق دارن این دو تا سایت...اگه مایل بودین بگین تا بیشتر راجع بهشون صحبت کنیم...
بهتره خودتون هم یک سر برید و ثبت نام کنید...
http://www.topcoder.com
http://icpcres.ecs.baylor.edu/onlinejudge/
 

RED-C0DE

عضو جدید
این سوال فقط یک ورودی داره (و قطعا یک خروجی) ...همونطور که سوال رو خودنین و فهمیدین ، سوال می گه یک نوار (Tape) وجود داره که روش اطلاعاتی ذخیره شده (روی نوار ، اطلاعات بصورت بایت به بایت در امتداد نوار ، پشت سر هم نوشته می شن)
اگه یکم توی ورودی و خروجی ای که داده دقت کنین متوجه رابطه مورد نظر می شین...
(نکته مهم سوال فقط فهمیدن همین موضوع هست)
اگه کسی متوجه نشد دفعه بعد می گم که رابطش چیه...بعدش فقط یک پردازش String باید روی ورودی انجام بدین...
 

RED-C0DE

عضو جدید
اینم یک سایت خوب کمکی برای تست کردن ورودی/خروجیهای سوالای مختلف (بیشتر سوالای UVA رو داره)

http://uva.xgd.dk/problemssolve.php

چند هزار سوال توی دیتابیسش داره...مثلا شما یک سوال رو حل کردید ولی مطمئن نیستید با test case ای که ساختین و بهش دادین آیا جواب درست داره می ده یا نه...در اینصورت می تونین سوال مورد نظرتون رو در این سایت پیدا کنین و روش کلیک کنین و ورودی ای که ساختین رو بهش بدین تا خروجی درست رو نشون بده...
 

msmiran

عضو جدید
سلام
یه سوال داشتم که زیاد ربطی به این تاپیک نداره.ولی گفتم ممکنه شما اساتید گرامی جوابشو بدونید:
همون طور که میدونید توی زبانهای برنامه نویسی از اسمبلی گرفته تا سی شارپ یه قاعده هست که میگه نام متغیر نباید با عدد شروع بشه.میخواستم بپرسم کسی از دوستان دلیلش رو میدونه؟یعنی قاعده خاصی داره که نمیشه عدد رو اول نام متغیر گذاشت یا نه فقط یه قرارداده؟
 

yasin_d

عضو جدید
کاربر ممتاز
خودم دلیلش رو نمی دونم.
ولی فکر کنم از اونجایی که ما برای نوشتن یک رشته برای مقایسه یا مقدار دهی از کوتیشن یا تک کوت استفاده می کنیم کامپایلر می تونه بین رشته ای که ما می خواهیم و متغیر ها تفاوت قایل بشه
ولی چون اعداد بدون کوتیشن نوشته می شوند و به صورت ساده هستند برای تفاوت بین یک متغیر و عدد این قانون اجرا می شود که شروع متغیر با حروف باشد.

برای اطلاعات بیشتر به کتاب های طراحی زبان و کامپایلر مراجعه کن
 

poorya.pzm

عضو جدید
شروع acm

شروع acm

سلام
من الان ترم اول نرم افزارم می خواستم ببینم از کجا باید برای ACM شروع کنم و از چه زبان هایی میشه استفاده کرد.vb.net هم تا حدودی یاد دارم و نهایت برنامه ای که نوشتم تبدیل عدد به حروف بوده.
 

yasin_d

عضو جدید
کاربر ممتاز
سلام دوست عزیز
امیدوارم موفق باشی.
یک نکته ای که تو ACM مهم هست الگوریتم نویسی است . یعنی اینکه حالا برای مثالهایی که راه حلش خیلی طولانی هست بتونی یه الگوریتم خوب بنویسی
به نظر یاد داشتن یک یا چند زبان در درجه دوم هست و مسئله مهم هوش فرد هست که می تونه بهش کمک کنه اگه تو توانایی حل یک مسئله رو به صورت الگوریتم وار داشته باشی مطمئنا در تبدیل اون الگوریتم به هر syntax زبانی مشکلی نداری
 

msmiran

عضو جدید
سلام خدمت دوستان عزیز
مثل این که تاپیک به طور کل خوابیده.
------------------------------
ترم قبل که برنامه نویسی داشتیم استادمون یه برنامه داد که گفت این هم مربوط به مسابقات ACM بوده:

برنامه ای که دو عدد بسیار بزرگ (حداکثر 500 رقم) را دریافت کرده و آنها را با هم جمع کند.
این برنامه رو تونستم بنویسم ولی توی یه حالت مشکل داره اونم وقتی که دو عدد از نظر تعداد ارقام با هم برابر باشند.
کد برنامه رو براتون میزارم.امیدوارم بتونید مشکل اونو رفع کنید.
فزض کنید دو عدد 5 رقمی رو با هم جمع میکنید.اگه حاصل 5 رقمی شد که هیچ ولی اگه حاصل یه عدد 6 رقمی بشه برنامه خطا میگیره و به همین ترتیب.

کد:
[LEFT]using System;[/LEFT]
  [LEFT]using System.Collections.Generic;[/LEFT]
  [LEFT]using System.Text;[/LEFT]
  
  [LEFT]namespace ConsoleApplication7[/LEFT]
  [LEFT]{[/LEFT]
  [LEFT]    class Program[/LEFT]
  [LEFT]    {[/LEFT]
  [LEFT]        static void Main(string[] args)[/LEFT]
  [LEFT]        {[/LEFT]
  [LEFT]            string temp;[/LEFT]
  [LEFT]            string num1 = Console.ReadLine();[/LEFT]
  [LEFT]            string num2 = Console.ReadLine();[/LEFT]
  [LEFT]            if (num1.Length < num2.Length)[/LEFT]
  [LEFT]            {[/LEFT]
  [LEFT]                temp = num1;[/LEFT]
  [LEFT]                num1 = num2;[/LEFT]
  [LEFT]                num2 = temp;[/LEFT]
  [LEFT]            }[/LEFT]
  [LEFT]            int[] sum = new int[num1.Length];[/LEFT]
  [LEFT]            int m = num1.Length - 1;[/LEFT]
  [LEFT]            int n = num2.Length - 1;[/LEFT]
  [LEFT]            while (n >= 0)[/LEFT]
  [LEFT]            {[/LEFT]
  
  [LEFT]                sum[m] += (num1[m] + num2[n] - 96);[/LEFT]
  [LEFT]                if (sum[m] >= 10)[/LEFT]
  [LEFT]                {[/LEFT]
  [LEFT]                    sum[m] -= 10;[/LEFT]
  [LEFT]                    sum[m - 1] += 1;[/LEFT]
  [LEFT]                }[/LEFT]
  [LEFT]                n--;[/LEFT]
  [LEFT]                m--;[/LEFT]
  [LEFT]            }[/LEFT]
  [LEFT]            while (m >= 0)[/LEFT]
  [LEFT]            {[/LEFT]
  [LEFT]                 sum[m] += num1[m] - 48;[/LEFT]
  [LEFT]                 if (sum[m] >= 10)[/LEFT]
  [LEFT]                 {[/LEFT]
  [LEFT]                     if (m != 0)[/LEFT]
  [LEFT]                         sum[m] -= 10;[/LEFT]
  [LEFT]                     if (m - 1 == -1)[/LEFT]
  [LEFT]                         break;[/LEFT]
  [LEFT]                     sum[m - 1] += 1;[/LEFT]
  [LEFT]                 }[/LEFT]
  [LEFT]                m--;[/LEFT]
  [LEFT]            }[/LEFT]
  [LEFT]            for (int i = 0; i < num1.Length; i++)[/LEFT]
  [LEFT]                Console.Write("{0}", sum[i]);[/LEFT]
  [LEFT]            Console.ReadLine();[/LEFT]
  [LEFT]        }[/LEFT]
  [LEFT]    }[/LEFT]
  [LEFT]}[/LEFT]
 

Similar threads

بالا