{"id":156,"date":"2017-02-20T14:28:03","date_gmt":"2017-02-20T17:28:03","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/competir\/?p=156"},"modified":"2017-02-22T10:54:13","modified_gmt":"2017-02-22T13:54:13","slug":"sudoku-seletiva-ime-2006","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/competir\/sudoku-seletiva-ime-2006\/","title":{"rendered":"Sudoku [Seletiva IME 2006]"},"content":{"rendered":"<div class=\"description\">\n<p style=\"text-align: right;\"><em>Seletiva para Maratona de Programa\u00e7\u00e3o do IME &#8211; 2006<\/em><\/p>\n<p>O jogo de Sudoku espalhou-se rapidamente por todo o mundo, tornando-se hoje o passatempo mais popular em todo o planeta. Muitas pessoas, entretanto, preenchem a matriz de forma incorreta, desrespeitando as restri\u00e7\u00f5es do jogo. Sua tarefa neste problema \u00e9 escrever um programa que verifica se uma matriz preenchida \u00e9 ou n\u00e3o uma solu\u00e7\u00e3o para o problema.<\/p>\n<p>A matriz do jogo \u00e9 uma matriz de inteiros 9 x 9 . Para ser uma solu\u00e7\u00e3o do problema, cada linha e coluna deve conter todos os n\u00fameros de 1 a 9. Al\u00e9m disso, se dividirmos a matriz em 9 regi\u00f5es 3 x 3, cada uma destas regi\u00f5es tamb\u00e9m deve conter os n\u00fameros de 1 a 9. O exemplo abaixo mostra uma matriz que \u00e9 uma solu\u00e7\u00e3o do problema.<\/p>\n<p class=\"center\"><a href=\"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/02\/Sudoku.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-157\" src=\"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-content\/uploads\/sites\/5\/2017\/02\/Sudoku.png\" alt=\"\" width=\"247\" height=\"208\" \/><\/a><\/p>\n<\/div>\n<p><!--more--><\/p>\n<h2>Entrada<\/h2>\n<div class=\"input\">\n<p>S\u00e3o dadas v\u00e1rias inst\u00e2ncias. O primeiro dado \u00e9 o n\u00famero <strong>n<\/strong> &gt; 0 de matrizes na entrada. Nas linhas seguintes s\u00e3o dadas as <strong>n<\/strong> matrizes. Cada matriz \u00e9 dada em 9 linhas, em que cada linha cont\u00e9m 9 n\u00fameros inteiros.<\/p>\n<\/div>\n<h2>Sa\u00edda<\/h2>\n<div class=\"output\">\n<p>Para cada inst\u00e2ncia seu programa dever\u00e1 imprimir uma linha dizendo <em>&#8220;Instancia <strong>k<\/strong><\/em>&#8220;, onde <strong>k<\/strong> \u00e9 o n\u00famero da inst\u00e2ncia atual. Na segunda linha, seu programa dever\u00e1 imprimir &#8220;<em>SIM&#8221;<\/em> se a matriz for a solu\u00e7\u00e3o de um problema de Sudoku, e &#8220;<em>NAO&#8221;<\/em> caso contr\u00e1rio. Imprima uma linha em branco ap\u00f3s cada inst\u00e2ncia.<\/p>\n<\/div>\n<table>\n<thead>\n<tr>\n<td>Exemplo de Entrada<\/td>\n<td>Exemplo de Sa\u00edda<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"division\">2<br \/>\n1 3 2 5 7 9 4 6 8<br \/>\n4 9 8 2 6 1 3 7 5<br \/>\n7 5 6 3 8 4 2 1 9<br \/>\n6 4 3 1 5 8 7 9 2<br \/>\n5 2 1 7 9 3 8 4 6<br \/>\n9 8 7 4 2 6 5 3 1<br \/>\n2 1 4 9 3 5 6 8 7<br \/>\n3 6 5 8 1 7 9 2 4<br \/>\n8 7 9 6 4 2 1 5 3<br \/>\n1 3 2 5 7 9 4 6 8<br \/>\n4 9 8 2 6 1 3 7 5<br \/>\n7 5 6 3 8 4 2 1 9<br \/>\n6 4 3 1 5 8 7 9 2<br \/>\n5 2 1 7 9 3 8 4 6<br \/>\n9 8 7 4 2 6 5 3 1<br \/>\n2 1 4 9 3 5 6 8 7<br \/>\n3 6 5 8 1 7 9 2 4<br \/>\n8 7 9 6 4 2 1 3 5<\/td>\n<td>Instancia 1<br \/>\nSIMInstancia 2<br \/>\nNAO<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Solu\u00e7\u00e3o em C<\/strong><\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;stdio.h&gt;\r\n\r\nint main() {\r\n\tint k, i, j, temp, instancia = 0, solucao = 1;\r\n\tint matriz[9][9], somaLinha[9], somaColuna[9], somaMatriz[3][3];\r\n\r\n\tscanf(\"%i\", &amp;k);\r\n\r\n    for(int cont = 0; cont &lt; k; cont++) {\r\n    \t\/\/leitura de valores para a matriz\r\n\t\tfor(i = 0; i &lt; 9; i++) {\r\n\t\t\tfor(j = 0; j &lt; 9; j++) { \r\n\t\t\t\tscanf(\"%i\", &amp;matriz[i][j]);\r\n\t\t\t}\r\n    \t}\r\n\r\n\t\t\/\/inicializa vari\u00e1veis somadoras com zero\r\n\t\tfor (i = 0; i &lt; 9; i++) {\r\n\t\t\tsomaLinha[i]         = 0;\r\n\t\t\tsomaColuna[i]        = 0;\r\n\t\t\tsomaMatriz[i\/3][i%3] = 0;\r\n\t\t\t\/\/descomente o prinf abaixo para facilitar o entendimento sobre\r\n\t\t\t\/\/como a matriz est\u00e1 sendo preenchida sem utilizar dois for \r\n\t\t\t\/\/printf(\"%i %i \\n\", i\/3, i%3);\r\n\t\t}\r\n    \r\n    \t\/\/contabiliza valores para resolver o problema\r\n\t\tfor (i = 0; i &lt; 9; i++) {\r\n\t\t\tfor (j = 0; j &lt; 9; j++) {\r\n\t\t\t\ttemp = matriz[i][j] * matriz[i][j];\r\n\t\t\t\tsomaLinha[i]  += temp;\r\n\t\t\t\tsomaColuna[j] += temp;\r\n\t\t\t\tsomaMatriz[i\/3][j\/3] += temp;\r\n\t\t\t\t\/\/printf(\"%i %i %i %i %i\\n\", i, j, i\/3, j\/3, matriz[i][j]);\r\n\r\n\t\t\t\tif (i == 8 &amp;&amp; somaColuna[j] != 285) { break; }\r\n\t\t\t} \r\n\r\n\t\t\tif (somaLinha[i] != 285) { break; }\r\n\t\t}\r\n\r\n\t\t\/\/mostra os resultados\r\n\t\tinstancia++;\r\n\t\tprintf(\"Instancia %i\\n\", instancia);\r\n\r\n\t\t\/\/determina se \u00e9 a solu\u00e7\u00e3o\r\n\t\tfor (int i = 0; i &lt; 3; i++) {\r\n\t\t\tfor (int j = 0; j &lt; 3; j++) {\r\n\t\t\t\tif (somaMatriz[i][j] != 285) {\r\n\t\t\t\t\tsolucao = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n    \t}\r\n\r\n\t\tif (solucao == 1) {\r\n\t\t\tprintf(\"SIM\\n\\n\");\r\n\t\t} else {\r\n\t\t\tprintf(\"NAO\\n\\n\");\r\n\t\t}\r\n\r\n\t\tsolucao = 1;\r\n\t}\r\n          \r\n    return 0;\r\n}<\/pre>\n<p><strong>Teste o c\u00f3digo em:<\/strong> <a href=\"http:\/\/ideone.com\/MBGDJq\" target=\"_blank\">http:\/\/ideone.com\/MBGDJq<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seletiva para Maratona de Programa\u00e7\u00e3o do IME &#8211; 2006 O jogo de Sudoku espalhou-se rapidamente por todo o mundo, tornando-se hoje o passatempo mais popular em todo o planeta. Muitas pessoas, entretanto, preenchem a matriz de forma incorreta, desrespeitando as restri\u00e7\u00f5es do jogo. Sua tarefa neste problema \u00e9 escrever um programa que verifica se uma [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,7],"tags":[9],"class_list":["post-156","post","type-post","status-publish","format-standard","hentry","category-cc","category-maratona-de-programacao","tag-matriz"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts\/156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/comments?post=156"}],"version-history":[{"count":5,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts\/156\/revisions"}],"predecessor-version":[{"id":178,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/posts\/156\/revisions\/178"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/media?parent=156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/categories?post=156"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/tags?post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}