assignment3.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫ﺗﻮﺿﻴﺤﺎت‪:‬‬
‫• ﻧﮑﺎت ذﮐﺮ ﺷﺪﻩ در ﺗﻤﺮﻳﻨﺎت ﻗﺒﻠﯽ را ﺑﻪ ﻃﻮر ﮐﺎﻣﻞ رﻋﺎﻳﺖ ﮐﻨﻴﺪ‪.‬‬
‫• ﺗﻤﺮﻳﻦهﺎ را ﺑﻪ ﺁدرس ‪ cpphomework٨٥٢@gmail.com‬ارﺳﺎل ﮐﻨﻴﺪ‪.‬‬
‫• ﻣﻬﻠﺖ ارﺳﺎل ﺗﻤﺮﻳﻦهﺎ ﺗﺎ ﺳﺎﻋﺖ ‪ ١٢‬ﺷﺐ ﺟﻤﻌﻪ ‪ ١٣٨٦/٢/١٤‬ﻣﯽﺑﺎﺷﺪ‪.‬‬
‫• ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﮑﻪ در ﺗﻌﻴﻴﻦ زﻣﺎن ارﺳﺎل ﺗﻤﺮﻳﻦهﺎ اﻣﺘﺤﺎﻧﺎت ﺷﻤﺎ ﻣﺪ ﻧﻈﺮ ﻗﺮار ﮔﺮﻓﺘﻪ‪ ،‬ﻟﺬا اﻣﮑﺎن‬
‫ﺗﻤﺪﻳﺪ زﻣﺎن ارﺳﺎل ﺗﻤﺮﻳﻦهﺎ وﺟﻮد ﻧﺪارد‪.‬‬
‫• ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ‪.‬‬
‫ﻣﺴﺌﻠﻪ اول ‪---------------------------------------------------------------------------------------‬‬
‫ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ ‪Dooz.cpp :‬‬
‫ﻳﮏ ﺟﺪول ‪ m*n‬دارﻳﻢ‪ .‬در هﺮ ﺧﺎﻧﻪ ﺁن ﻳﮏ ﻣﻬﺮﻩ رﻧﮕﯽ وﺟﻮد دارد‪ .‬در هﺮ ﺣﺮﮐﺖ‪ ،‬ﺗﻤﺎم ﻣﻬﺮﻩ هﺎﻳﯽ ﮐﻪ دوز ﺑﺎﺷﻨﺪ‬
‫در ﻳﮏ ﻟﺤﻈﻪ ﻧﺎﭘﺪﻳﺪ ﻣﯽ ﺷﻮﻧﺪ‪ .‬اﮔﺮ در ﻳﮑﯽ از راﺳﺘﺎهﺎﯼ اﻓﻘﯽ‪ ،‬ﻋﻤﻮدﯼ ﻳﺎ ﻣﻮرب ﺣﺪاﻗﻞ ﺳﻪ ﺧﺎﻧﻪ ﻣﺠﺎور وﺟﻮد‬
‫داﺷﺘﻪ ﺑﺎﺷﻨﺪ ﮐﻪ ﻣﻬﺮﻩ هﺎﯼ اﻳﻦ ﺧﺎﻧﻪ هﺎ هﻢ رﻧﮓ ﺑﺎﺷﻨﺪ‪ ،‬ﻣﻬﺮﻩ هﺎﯼ ﺁن ﺧﺎﻧﻪ هﺎ در ﺁن ﻟﺤﻈﻪ دوز هﺴﺘﻨﺪ‪.‬ﭘﺲ از ﻧﺎﭘﺪﻳﺪ‬
‫ﺷﺪن هﻤﻪ ﻣﻬﺮﻩ هﺎﯼ دوز در ﻳﮏ ﻟﺤﻈﻪ ‪ ،‬در هﺮ ﺳﺘﻮن هﻤﻪ ﻣﻬﺮﻩ هﺎ ﭘﺎﻳﻴﻦ ﻣﯽ رﻳﺰﻧﺪ ﺗﺎ زﻳﺮ ﺁن هﺎ ﺧﺎﻧﻪ ﺧﺎﻟﯽ وﺟﻮد‬
‫ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬ﺳﭙﺲ دوﺑﺎرﻩ هﻤﻪ ﻣﻬﺮﻩ هﺎﯼ دوز ﺑﻪ ﻃﻮر هﻤﺰﻣﺎن ﻧﺎﭘﺪﻳﺪ ﻣﯽ ﺷﻮﻧﺪ و دوﺑﺎرﻩ ﻋﻤﻞ ﭘﺎﻳﻴﻦ رﻳﺨﺘﻦ ﻣﻬﺮﻩ هﺎ‬
‫ﺻﻮرت ﻣﯽ ﮔﻴﺮد و اﻳﻦ ﮐﺎر وﻗﺘﯽ ﻣﺘﻮﻗﻒ ﻣﯽ ﺷﻮد ﮐﻪ دﻳﮕﺮ ﻣﻬﺮﻩ دوزﯼ وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬ﺑﺮﻧﺎﻣﻪ اﯼ ﺑﻨﻮﻳﺴﻴﺪ ﮐﻪ‬
‫وﺿﻌﻴﺖ اوﻟﻴﻪ ﺟﺪول را ﺑﮕﻴﺮد و وﺿﻌﻴﺖ ﻧﻬﺎﻳﯽ ﺁن را ﻣﺸﺨﺺ ﮐﻨﺪ‪.‬‬
‫ورودﯼ‬
‫در ﺳﻄﺮ اول ورودﯼ اﺑﺘﺪا ‪ m‬و ‪ n‬ﺁﻣﺪﻩ اﻧﺪ و ﺑﻌﺪ در ‪ m‬ﺳﻄﺮ ﺑﻌﺪﯼ در هﺮ ﺳﻄﺮ ‪ n‬ﻋﺪد ﺑﻪ ﻧﺸﺎﻧﻪ رﻧﮓ‬
‫ﻣﻬﺮﻩ هﺎﯼ ﻳﮏ ﺳﻄﺮ ﺁﻣﺪﻩ اﺳﺖ‪.‬‬
‫ﺧﺮوﺟﯽ‬
‫در ‪ m‬ﺳﻄﺮ وﺿﻌﻴﺖ ﻧﻬﺎﻳﯽ ﺟﺪول را ﺑﻨﻮﻳﺴﻴﺪ‪ .‬اﮔﺮ در ﻳﮏ ﺧﺎﻧﻪ ﻣﻬﺮﻩ اﯼ وﺟﻮد ﻧﺪاﺷﺖ ﻋﺪد ﺻﻔﺮ را در‬
‫ﺁن ﺧﺎﻧﻪ ﺑﻨﻮﻳﺴﻴﺪ‪.‬‬
‫ﺗﻮﺿﻴﺤﺎت‬
‫ورودﯼ و ﺧﺮوﺟﯽ ﺑﺮﻧﺎﻣﻪ اﺳﺘﺎﻧﺪارد ) ﺻﻔﺤﻪ ﮐﻠﻴﺪ و ﻧﻤﺎﻳﺸﮕﺮ ( ﻣﯽ ﺑﺎﺷﻨﺪ‪ .‬ﻓﺮض ﮐﻨﻴﺪ رﻧﮓ ﻣﻬﺮﻩ هﺎ ﻋﺪدﯼ‬
‫ﺑﻴﻦ ‪ ١‬ﺗﺎ ‪ ١٠٠٠٠٠‬اﺳﺖ و ‪ m،n<١٠٠‬ﻣﯽ ﺑﺎﺷﻨﺪ‪.‬‬
‫ﻧﻤﻮﻧﻪ ورودﯼ و ﺧﺮوﺟﯽ هﺎ را در زﻳﺮ ﻣﺸﺎهﺪﻩ ﻣﯽ ﮐﻨﻴﺪ ‪:‬‬
‫ورودﯼ ﻧﻤﻮﻧﻪ‪:‬‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‪:‬‬
‫‪٠٠٠٠٠‬‬
‫‪٢٠٠٠٠‬‬
‫‪٢٠٠٢٠‬‬
‫‪٣٢٠٣٠‬‬
‫‪٢٢٠٣٢‬‬
‫‪٥٥‬‬
‫‪٢٢٤٢٣‬‬
‫‪٢١٥٤٣‬‬
‫‪٥٢١٣٣‬‬
‫‪٣٥١١٢‬‬
‫‪٢٤١٣١‬‬
‫ﻣﺴﺌﻠﻪ دوم ‪---------------------------------------------------------------------------------------‬‬
‫‪١‬‬
permute.cpp : ‫ﻧﺎم‬
Input: a number N
Output: generate all the different permutations of numbers from ١ to N each
in one line, numbers should be separated by ','.
:‫ورودﯼ ﻧﻤﻮﻧﻪ‬
:‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
٣
١, ٢, ٣
٢, ٣, ١
٣, ٢, ١
١, ٣, ٢
٣, ١, ٢
٢, ١, ٣
--------------------------------------------------------------------------------------- ‫ﻣﺴﺌﻠﻪ ﺳﻮم‬
Sort list of topples of the form (i, j) using any algorithm you know without extra
memory (you should sort in place).
You should first them according to the first number then according to the second
number.
For sorting you can find min and swap it with the first element and do it for n(size
of the list) times and the list will be sorted.
You should write two functions. One for sorting the input array and other one for
writing sorted array to the output.
Input:
An integer N denoting the size of the list
N lines of the form i, j
Output:
N lines each containing a topple of the form given in input sorted in ascending
order.
:‫ورودﯼ ﻧﻤﻮﻧﻪ‬
:‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
٤
٥٤
٣٢
٥١
١٢
١٢
٣٢
٥١
٥٤
٢