Премини към съдържанието
Mi Gu (Mili)

Помощ със задача C++

    Препоръчан отговор


    Да се напише програма, която при въвеждане на n цели числа съобщава максималното p, такова че измежду n-те цели числа има p еднакви.

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове

    преди 3 минути, Yoana Markova написа:

    Да се напише програма, която при въвеждане на n цели числа съобщава максималното p, такова че измежду n-те цели числа има p еднакви.

    1. Не можахте ли да уцелите правилния раздел?

    2. Започнете с писането, ние ще помагаме. Тук не толерираме мързела

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове
    на August 3, 2016 в 15:42, Yoana Markova написа:

     

    Да се напише програма, която при въвеждане на n цели числа съобщава максималното p, такова че измежду n-те цели числа има p еднакви.

     

    Не разбрах кое не е ясното със задачата. После ние, форумниците сме били адски груби. :(

    Редактирано от frozener (преглед на промените)

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int n,p;
        cout << "N = ";
        cin >> n;
        if (n<1) return 0;
        int *a=new int[n];
        int *c=new int[n];
        p=0;
        for (int i=0; i<n; i++)
        {
            cout<<"A["<<i<<"] = ";
            cin >>a[i];
            int t=1;
            for (int j=i-1; j>=0; j--)
                if (a[i]==a[j]) 
                {
                     t=c[j]+1;
                     break;
                }
            c[i]=t;
            if (p<t) p=t;
        }
        cout<<"P = "<<p<<endl;
        delete[] a;
        delete[] c;
    }

     

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове
    преди 6 минути, ined написа:

     

                     t=c[j]+1;

    Много опасен ред, особено при условие че масива не е инициализиран (нулиран)

    И вместо това:

    t=c[j]+1;
                     break;
                }
            c[i]=t;

    Е много по-просто да се увеличи директно стойността на елемента от масива намясто


    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове

    Не това е целта и c[j] е инициализиран вече.

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове
    току-що, ined написа:

    Не това е целта и c[j] е инициализиран вече.

    Къде? Ти само го дефинираш. И по дефиниция може да има каквато си иска стойност

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    struct mruct
    {
    	int element;
    	int count;
    }mru;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	mru.count = 1;
    	int p = 1;
    	int n;
    	cout << "N = ";
    	cin >> n;
    	if (n<1) return 0;
    	mruct* a = (mruct*)malloc(n * sizeof(mruct));
    	int i;
    	for (i = 0; i < n; i++)
    	{
    		cout << "A[" << i << "] = ";
    		cin >> mru.element;
    		for (int j = 0; j < i; j++)
    		{
    			if (a[j].element == mru.element)
    			{
    				a[j].count++;
    				if (p < a[j].count) p = a[j].count;
      				break;
    			}
    		}
    		a[i] = mru;
    	}
    	cout << p;
      	free(a);
    	return 0;
    }

     

    Редактирано от Реджеп Иведик (преглед на промените)

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове

    На чисто С с хеш таблица

    #include <stdlib.h>
    #include <stdio.h>
    
    struct mruct
    {
    	int element;
    	int count;
    	struct mruct* next;
    }mru, *conductor, *monductor;
    
    struct mruct** table;
    
    int main()
    {
    	int p = 1;
    	int n;
    	int i;
    	printf("N = ");
    	scanf("%d", &n);
    	if (n < 1) return 0;
    	table = (struct mruct**)calloc(sizeof(struct mruct*), n);
    	for (i = 0; i < n; i++)
    	{
    		printf("Input next integer --> ");
    		scanf("%d", &mru.element);
    		if (table[mru.element % n] == 0)
    		{
    			mru.count = 1;
    			mru.next = 0;
    			table[mru.element % n] = (struct mruct*)malloc(sizeof(mruct));
    			*table[mru.element % n] = mru;
    		}
    		else
    		{
    			conductor = table[mru.element % n];
    			for (;;)
    			{
    				if (conductor->element == mru.element)
    				{
    					conductor->count++;
    					if (p < conductor->count) p = conductor->count;
    					break;
    				}
    				else
    				{
    					if (conductor->next == 0)
    					{
    						mru.count = 1;
    						mru.next = 0;
    						conductor->next = (struct mruct*)malloc(sizeof(mruct));
    						*(conductor->next) = mru;
    						break;
    					}
    					else
    					{
    						conductor = conductor->next;
    					}
    				}
    			}
    		}
    	}
    	printf("%d", p);
    	for (i = 0; i < n; i++)
    	{
    		if (table[i] == 0) continue;
    		conductor = table[i];
    		while (conductor->next != 0)
    		{
    			monductor = conductor->next;
    			free(conductor);
    			conductor = monductor;
    		}
    		free(conductor);
    	}
      	free(table);
    	return 0;
    }

     

    Редактирано от Реджеп Иведик (преглед на промените)

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове

    На чисто С++ с хеш таблица

    #include <iostream>
    #include <unordered_map>
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int temp;
    	int p = 1;
    	int n;
    	unordered_map <int, int> umap;
    	cout << "N = ";
    	cin >> n;
    	if (n < 1) return 0;
    	int i;
    	for (i = 0; i < n; i++)
    	{
    		cout << "Input next integer --> ";
    		cin >> temp;
    		auto search = umap.find(temp);
    		if (search != umap.end())
    		{
    			umap[temp]++;
    			if (p < umap[temp]) p = umap[temp];
    		}
    		else
    		{
    			umap.emplace(temp, 1);
    		}
    	}
    	cout << p;
    	return 0;
    }

     

    Сподели този отговор


    Линк към този отговор
    Сподели в други сайтове

    Регистрирайте се или влезете в профила си за да коментирате

    Трябва да имате регистрация за да може да коментирате това

    Регистрирайте се

    Създайте нова регистрация в нашия форум. Лесно е!

    Нова регистрация

    Вход

    Имате регистрация? Влезте от тук.

    Вход


    ×

    Информация

    Този сайт използва бисквитки (cookies), за най-доброто потребителско изживяване. С използването му, вие приемате нашите Условия за ползване.