Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как упростить прогу C++, С++ 
:(
    Опции темы
NebelDT
  Дата 29.9.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.9.2008
Где: RU

Репутация: -6
Всего: -10



 smile Как такое чюдо smile (олимпиадная задача) можно упростить???(чтобы быстрее выполнялась???)
Код

#include <stdio.h>
main()
{
int i=0,j=0,CHA1=0,CHA2=0,MIN1=0,MIN2=0,SEC1=0,SEC2=0,m1=0,m2=0;
char A[6][21];
char X1[1]="|",X2[1]="-";
for(i=0;i<5;i++){
   for(j=0;j<20;j++){
      scanf("%1s",&A[i][j]);
}}
m1=0;m2=0;
for(i=0;i<5;i++){//111
   for(j=0;j<3;j++){
      if(A[i][j]==X1[0]){m2++;}
      if(A[i][j]==X2[0]){m1++;}
}}
if((m1+m2)==2)  {CHA1=1;}
if((m1+m2)==4)  {CHA1=4;}
if((m1+m2)==3)  {CHA1=7;}
if((m1+m2)==7)  {CHA1=8;}
if(m1==1&&m2==5){CHA1=0;}
if(m1==3&&m2==3){CHA1=0;}
if(m1==2&&m2==4){CHA1=6;}
if(m1==4&&m2==2){CHA1=6;}
if(m1==4&&m2==1){CHA1=2;}
if(m1==2&&m2==3){CHA1=2;}
if(m1>4|m2>5||m1<1||m2<1){printf("0");return (0);}
m1=0;m2=0;
for(i=0;i<5;i++){//222
   for(j=3;j<6;j++){
      if(A[i][j]==X1[0]){m2++;}
      if(A[i][j]==X2[0]){m1++;}
}}
if((m1+m2)==2)  {CHA2=1;}
if((m1+m2)==4)  {CHA2=4;}
if((m1+m2)==3)  {CHA2=7;}
if((m1+m2)==7)  {CHA2=8;}
if(m1==1&&m2==5){CHA2=0;}
if(m1==3&&m2==3){CHA2=0;}
if(m1==2&&m2==4){CHA2=6;}
if(m1==4&&m2==2){CHA2=6;}
if(m1==4&&m2==1){CHA2=2;}
if(m1==2&&m2==3){CHA2=2;}
if(m1>4||m2>5||m1<1||m2<1){printf("0");return (0);}
m1=0;m2=0;
for(i=0;i<5;i++){//333
   for(j=7;j<10;j++){
      if(A[i][j]==X1[0]){m2++;}
      if(A[i][j]==X2[0]){m1++;}
}}
if((m1+m2)==2)  {MIN1=1;}
if((m1+m2)==4)  {MIN1=4;}
if((m1+m2)==3)  {MIN1=7;}
if((m1+m2)==7)  {MIN1=8;}
if(m1==1&&m2==5){MIN1=0;}
if(m1==3&&m2==3){MIN1=0;}
if(m1==2&&m2==4){MIN1=6;}
if(m1==4&&m2==2){MIN1=6;}
if(m1==4&&m2==1){MIN1=2;}
if(m1==2&&m2==3){MIN1=2;}
if(m1>4||m2>5||m1<1||m2<1){printf("0");return (0);}
m1=0;m2=0;
for(i=0;i<5;i++){//444
   for(j=10;j<13;j++){
      if(A[i][j]==X1[0]){m2++;}
      if(A[i][j]==X2[0]){m1++;}
}}
if((m1+m2)==2)  {MIN2=1;}
if((m1+m2)==4)  {MIN2=4;}
if((m1+m2)==3)  {MIN2=7;}
if((m1+m2)==7)  {MIN2=8;}
if(m1==1&&m2==5){MIN2=0;}
if(m1==3&&m2==3){MIN2=0;}
if(m1==2&&m2==4){MIN2=6;}
if(m1==4&&m2==2){MIN2=6;}
if(m1==4&&m2==1){MIN2=2;}
if(m1==2&&m2==3){MIN2=2;}
if(m1>4||m2>5||m1<1||m2<1){printf("0");return (0);}
m1=0;m2=0;
for(i=0;i<5;i++){//555
   for(j=14;j<17;j++){
      if(A[i][j]==X1[0]){m2++;}
      if(A[i][j]==X2[0]){m1++;}
}}
if((m1+m2)==2)  {SEC1=1;}
if((m1+m2)==4)  {SEC1=4;}
if((m1+m2)==3)  {SEC1=7;}
if((m1+m2)==7)  {SEC1=8;}
if(m1==1&&m2==5){SEC1=0;}
if(m1==3&&m2==3){SEC1=0;}
if(m1==2&&m2==4){SEC1=6;}
if(m1==4&&m2==2){SEC1=6;}
if(m1==4&&m2==1){SEC1=2;}
if(m1==2&&m2==3){SEC1=2;}
if(m1>4||m2>5||m1<1||m2<1){printf("0");return (0);}
m1=0;m2=0;
for(i=0;i<5;i++){//777
   for(j=17;j<20;j++){
      if(A[i][j]==X1[0]){m2++;}
      if(A[i][j]==X2[0]){m1++;}
}}
if((m1+m2)==2)  {SEC2=1;}
if((m1+m2)==4)  {SEC2=4;}
if((m1+m2)==3)  {SEC2=7;}
if((m1+m2)==7)  {SEC2=8;}
if(m1==1&&m2==5){SEC2=0;}
if(m1==3&&m2==3){SEC2=0;}
if(m1==2&&m2==4){SEC2=6;}
if(m1==4&&m2==2){SEC2=6;}
if(m1==4&&m2==1){SEC2=2;}
if(m1==2&&m2==3){SEC2=2;}
if(m1>4||m2>5||m1<1||m2<1){printf("0");return (0);}
printf("%1d%1d\n%1d%1d\n%1d%1d",CHA1,CHA2,MIN1,MIN2,SEC1,SEC2);
return(0);
} 
smile 

Это сообщение отредактировал(а) Daevaorn - 29.9.2008, 12:23
PM MAIL WWW YIM   Вверх
REZiaMIX
Дата 29.9.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: 1
Всего: 4



Свитчи кейсы поставить , да и вообще что то много повторений , непонятно что ОНО делает)


--------------------
user posted image
PM MAIL   Вверх
NebelDT
Дата 29.9.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.9.2008
Где: RU

Репутация: -6
Всего: -10



 smile Ну вообше эта прога восстанавливает изображение на циферблате цифровом)) Задачка вот такая, и работает)) но уж больно медленно, если бы в тестируюшей системе было ограничение по скорости, то не прошел бы тест... smile 
PM MAIL WWW YIM   Вверх
bsa
Дата 29.9.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



NebelDT, а нельзя ли уточнить задание (т.е. приведи его полностью)? А то если для понимания цели придется разбирать этот код, то нужно выполнять 2 работы, что лень.
PM   Вверх
grigsoft
Дата 29.9.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Дай догадаюсь - вводная матрица 21х6 - это электронное табло, и надо восстановить значение времени? Тогда нужна просто таблица, переводящая комбинацию точек в число.
PM MAIL   Вверх
DonPager
Дата 29.9.2008, 16:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



а если как-то так написать:
Код

int DecodeText(char **InpArr,const int N_iter)
{
  int m1=0,m2=0;
  for(int i=0;i<5;i++){
    for(int j=N_iter;j<N_iter+3;j++){
      if((char)InpArr[i][j]== '|')m2++;
      if((char)InpArr[i][j]== '-')m1++;
    }
  }

  if(m1>4||m2>5||m1<1||m2<1)return -1;

  int M = m1+m2;
  switch(M){
    case 2:return 1;
    case 3:return 7;
    case 4:return 4;
    case 5:return 2;
    case 6:if(m1%2)return 0;else return 6;
    case 7:return 8;
    default: return -1;
  }
}
//---------------------------------------------------------------------------
int main()
{
  int CHA1=0,CHA2=0,MIN1=0,MIN2=0,SEC1=0,SEC2=0;
  char A[6][21];

  for(int i=0;i<5;i++)for(int j=0;j<20;j++) scanf("%1s",&A[i][j]);

  CHA1 = DecodeText((char**)A,0);if(CHA1<0){printf("Error");return 0;}
  CHA2 = DecodeText((char**)A,3);if(CHA2<0){printf("Error");return 0;}
  MIN1 = DecodeText((char**)A,7);if(MIN1<0){printf("Error");return 0;}
  MIN2 = DecodeText((char**)A,10);if(MIN2<0){printf("Error");return 0;}
  SEC1 = DecodeText((char**)A,14);if(SEC1<0){printf("Error");return 0;}
  SEC2 = DecodeText((char**)A,17);if(SEC2<0){printf("Error");return 0;}

  printf("%1d%1d:%1d%1d:%1d%1d",CHA1,CHA2,MIN1,MIN2,SEC1,SEC2);

return(0);
}



Это сообщение отредактировал(а) DonPager - 29.9.2008, 16:33


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
NebelDT
Дата 30.9.2008, 08:45 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.9.2008
Где: RU

Репутация: -6
Всего: -10



DonPager  smile надо проверить этот код, ну должно работать))Хотя мне шас не до этого, патом... smile 
PM MAIL WWW YIM   Вверх
DonPager
Дата 30.9.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

Репутация: нет
Всего: 2



NebelDT, я просто загнал то что было- в ф-цию, исходных данных у меня нет, придумывать не охота smile поэтому и в работоспособности не уверен smile


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1075 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.