Анализ двоичного кода в ч\б изображения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Попалась вот такая задачка: Есть аналогичная: вместо чёрного столбца - черная строка. Я написал 25 сантиметров кода:
#include <stdio.h>
void main ()
{
          int p,ed,nu,k,e[1000],i,n,m,l[2],f,j;
          char x,c[1000];
          FILE *inp,*out;
          inp=fopen("input.txt","r");
          out=fopen("output.txt","w");
          fscanf(inp,"%d",&p);
          ed=1;
          nu=0;
          k=0;
          f=0;
          while (feof(inp)==0)
          {
                fscanf(inp,"%c",&x);
                if (x=='1'){
                            f=1;
                            k++;
                            e[ed]=k;
                            ed=ed+1;
                            c[k]=x;
                            }
                if (x=='0'){
                            k++;
                            nu=nu+1;
                            c[k]=x;
                            }
          }
          ed=ed-1;
          if (f==0){
                    fprintf(out,"Impossible");
                    fclose(inp);
                    fclose(out);      
                    }
          if(x=='1') {
                     k=k-1;
                     ed=ed-1;
                     }
          if(x=='0') {
                     k=k-1;
                     nu=nu-1;
                     }
          if (p!=k){
                    fprintf(out,"Impossible7");
                    fclose(inp);
                    fclose(out);      
                    }
          if (p%ed!=0){
                       fprintf(out,"Impossible6");
                       fclose(inp);
                       fclose(out);      
                       }
          for(i=3;i<=ed;i++){
                            if (e[i]-e[i-1]!=e[2]-e[1]){
                        fprintf(out,"Impossible5");
                        fclose(inp);
                        fclose(out);      
                        }
                            }
               
          l[1]=0;
          l[2]=0;
          if (c[1]=='1' && c[k]=='0' && ed>1){
                        for(i=e[ed];i<k; i++) l[2]++;
                        if (l[2]!= e[2]-e[1]-1){
                        fprintf(out,"Impossible4");
                        fclose(inp);
                        fclose(out);      
                        }
                        }
          if (c[1]=='0' && c[k]=='1' && ed>1){
                        for(i=1;i<e[1]; i++) l[1]++;
                        if (l[1]!= e[2]-e[1]-1){
                        fprintf(out,"Impossible3");
                        fclose(inp);
                        fclose(out);      
                        }
                        }
          if (c[1]=='1' && c[k]=='1' && ed==2 && n>2) {
                        fprintf(out,"Impossible2");
                        fclose(inp);
                        fclose(out);      
                        }                        
          if (c[1]=='0' && c[k]=='0' && ed>1){
                        for(i=1;i<e[1];i++) l[1]++;
                        for(i=e[ed];i<k; i++) l[2]++;
                        if (l[1]+l[2]!=e[2]-e[1]-1){
                        fprintf(out,"Impossible1");
                        fclose(inp);
                        fclose(out);      
                        }
                        }
          n=ed;
          m=p/n;
          fprintf(out,"%d %d",n, m);
          fclose(inp);
          fclose(out);
          inp=fopen("input.txt","w");
          for(j=1;j<m;j++){
                           for( i=1+m*(j-1);i<=(m*j);i++ ) {
                        if (i<m*j) fprintf(inp,"%c ",c[i]);
                        else fprintf(inp,"%c",c[i]);
                        }
                           fprintf(inp,"\n");
                           }
          fclose(inp);
}
Для проверки программа отправляется на сервер, сервер подставляет свой input.txt. Про мой код сервер отзывается негативно. Я считаю, что не учитываю какую-то крайнюю точку, подкладываемую сервером, но уже который час не могу её найти. Помогите пожалуйста.
Помогите с задачкой,2 день уже сижу над ней,мысли кончились.Помогите кто знает\*----*/

Решение задачи: «Анализ двоичного кода в ч\б изображения»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int N, tick, x = -1, step = -1, i;
    
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    scanf("%d", &N);
    for (i=0; i < N && scanf("%d", &tick); i++)
        if (tick == 1)
        {
            if (x == -1 && step != -1)
                x = i - step;
            else if (i - step != x && x != -1)
            {
                printf("Impossible");
                return 0;
            }
            step = i;
        }
 
    printf("%d %d", N / x, x);   
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы