Премини към съдържанието
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;
}

 

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


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

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

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

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

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

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

Вход

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

Вход


×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.