C Problem- projekt na spoj-u "Hardware"

0
 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
	/*n 1 wyraz ciagu
	  m ost wyraz ciagu
	  r zmienna ciagu
	  tablica wyrazy ciagu
	  tab  tablica do liczenia znaków*/

int main ()
{
	/*jak zdefiniowac wymiar tablicy ktora jest zalezna od ciagu?*/
	int tablica[]=;
	int n, m,r,;
    int liczba_zamowien;
    char linia1[50];
	char linia2[50];
	char linia_ciag[255];
    scanf("%i\n" , &liczba_zamowien);
    gets(linia1);
	gets(linia2);
	gets(linia_ciag);
	puts(linia1);
	puts(linia2);
	if(linia_ciag[0]=='+')
	{
		sscanf (linia_ciag,"%d %d %d", &n , &m , &r);
		int k;
	       for (k=n; k<m; k=k+r)
		   {
			   tablica[k];
					}
		  
		int tab[255]={0},i=i,j=0;
		char zdanie[255],litery[255];
			/*pewny blad*/
		zdanie=tablica[k];
		for(j=0;j<strlen(zdanie);j++)
				{
			litery[j]=zdanie[j];                             
			for(i=0;i<strlen(zdanie);i++)
					{
						if (zdanie[j]==zdanie[i])
							 tab[j]++;                                         
							}
					 } 

			 for(j=0;j<strlen(zdanie);j++)
			{
				for(i=j+1;i<strlen(zdanie);i++)
					{
					if (zdanie[j]==litery[i])
						litery[i]='0';                                         
						}
				}		
				for(j=0;j<strlen(zdanie);j++)
					if(litery[j]!='0'){  
			printf("%c=%d \n",litery[j],tab[j]);
					}
  
				

	else
			int tab[255]={0},i=0,j=0;
				/*blad*/
				zdanie=linia_ciag;
				for(j=0;j<strlen(zdanie);j++)
					{
						litery[j]=zdanie[j];                             
						for(i=0;i<strlen(zdanie);i++)
						{
							if (zdanie[j]==zdanie[i])
											 tab[j]++;                                         
								}
					 } 

			 for(j=0;j<strlen(zdanie);j++)
			{
				for(i=j+1;i<strlen(zdanie);i++)
					{
					if (zdanie[j]==litery[i])
						litery[i]='0';                                         
						}
				}		
				for(j=0;j<strlen(zdanie);j++)
					if(litery[j]!='0'){  
			printf("%c=%d \n",litery[j],tab[j]);
					}
					/*jak zliczyć zaleznosc miedzy tablicami litery i tab?
				printf("in total %d digits" , )*/
		system("pause");
return 0;
} 



	 

Tutaj kod a tutaj krótko opisze jak ma działać program

program ma liczyć ciąg gdy na poczatku lini pojawia sie znak "+" 1 cyfra to 1 wyraz ciagu 2 cyfra to ost wyrac ciągu a 3 cyfra to zmienna ciagu, gdy tego znaku nie ma traktowac linie jako liczbe a nie zmienne do ciągu. Ostatecznie ten program ma brać pod uwage wszystkie liczby jakie sie pojawia( kazdy wyraz ciagu +"liczby niezalezne") i zliczać ile razy pojawia sie kazda cyfra pojedyncza (0-9) i ostatnia linia w wyjsciu ma byc zliczenie ile pojawilo sie wszystkich znaków.

Link do Spoja. : http://www.spoj.pl/problems/HARDWARE/

W gre wchodzi nawet zapłata za ten "projekt"

0

Czas który jest potrzebny na analizę poprawności działania funkcji rośnie wykładniczo z jej długością *. Jak masz wszystko w jednym mainie, nikomu się nie będzie chciało tego analizować. Podczas dzielenia na mniejsze funkcje może się też okazać, że sam odkryjesz błąd.

* oszacowanie nie poparte żadnymi badaniami naukowymi.

0

właśnie robiłem takim sposobem rozpisywalem wszystko na czesci i teraz mam problem jak to połączyć

0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

long tab[]={0,0,0,0,0,0,0,0,0,0};
char cyfra;
void znaki(long tab[],char cyfra){
	(cyfra-'0');
}
void zliczznaki(long tab[], char *liczba){
int i;
for(i=0;i<strlen(liczba);i++){
	znaki(tab, cyfra);
		}
}
void zliczznaki2(long tab[], int liczba){
	int i;
	while(liczba){
		znaki(tab,liczba%10);
		liczba /= 10;
	}
}

int main ()
{
	
	int i, n, m,r,z;
    long liczba_zamowien,ile_adresow,total;
    char linia1[51];
	char linia2[51];
	char linia_ciag[255];
    scanf("%i\n" , &liczba_zamowien);
    while(liczba_zamowien--){
		gets(linia1);
		if(linia1!='\0'){
			z++;
		}
		puts(linia1);
		gets(linia2);
		puts(linia2);
		gets(linia_ciag);
		sscanf(linia2,"%i",&ile_adresow);
		while(ile_adresow>0)
		{
			if(linia_ciag[0]=='+')
			{
			sscanf (linia_ciag+1,"%d %d %d", &n , &m , &r);
			int k;
			   for (k=n; k<=m; k=k+r)
			   {
				   zliczznaki2(tab,k);
				   ile_adresow--;		
			   }
		  
			}
  
				

		else{
			int o;
			sscanf(linia_ciag,"%i", &o);
			{
				zliczznaki(tab,o);
				ile_adresow--;
			}
			
			}
		}
		total = 0;
		for(i=0;i<10;i++){
			total+=tab[i];
		}
		printf("Make %d digit %d \n", i,tab[i]);
		if(total<=1){
		printf("In total %d digit",total);
		}
		else{
			printf("In total %d digits",total);
		}
	}
return 0;
} 





 

w 64 lini

	zliczznaki(tab,o);

void zliczznaki(long tab[], char *liczba){
int i;
for(i=0;i<strlen(liczba);i++){
	znaki(tab, cyfra); 

64 invalid conversion from char' to char*
64 initializing argument 2 of `void zliczznaki(long int*, char*)'

Rozumiem że są źle opisane zmienne ale nie wiem jak to zamienic by działało

1 użytkowników online, w tym zalogowanych: 0, gości: 1