Tìm giá trị xuất hiện nhiều nhất và số lần xuất hiện trong MẢNG 1 chiều?

Mình có bài tập như sau:

Tìm giá trị xuất hiện nhiều nhất và số lần xuất hiện trong mãng 1 chiều

Dự là a Đạt sẽ vào cmt bla bla rồi dẫn link Hỏi Bài Tập có giúp ta học tốt hơn bla bla. :smile:

3 Likes

@Kelvin_Nguy_n đáng lẽ ra bạn phải hỏi thế này :
1 là bạn đăng bài hỏi mọi người cách giải
2 là bạn sẽ trình bày cách bạn giải . t rong khi giải bạn bí ở mục nào thì bạn post code lên để mọi người giúp.
Đặt 1 câu hỏi khôn sẽ giúp ta học hỏi rất nhiều đó :smile: thử sửa lại đi
tiện thể mình hướng dẫn bạn luôn nhé . cách giải của mình như sau :

nhập mảng
xuất mảng
tạo 1 hàm đếm số lần của 1 giá trị bất kỳ có trong mảng
duyệt lại mảng và lấy giá trị max từ hàm đếm số lần ở trên
hàm main để gọi hàm và trả kết quả nhé bạn

bạn làm đi bí ở đâu mình sẽ tư vấn

2 Likes

Post code luôn để anh @ltd khỏi quảng cáo clip :smiley:

#include <iostream>
#include <algorithm>
using namespace std;
 
int main() {
 
	int a[] = { 5,5,5,5,5,4,4,4,4,3,3,3,2,2,1 };
	int n = sizeof(a)/sizeof(a[0]);
 
	sort(a,a+n);
 
	int i = 0, max = 0,index = 0;
	int frequency;
	while(i < n)	{
 
		frequency = 1;
 
		while(a[i] == a[i+1])	{
 
			frequency++;
			i++;
		}
 
		if(max < frequency)	{
 
			max = frequency;
			index = i;
		}
 
		i++;
	}
 
	cout << "Maximum frequency: " << max << endl;
	cout << "Element has maximum frequency factor: " << a[index] << endl;
 
	return 0;
}
1 Like

thuật toán bạn học từ đâu vậy Minh Vũ

1 Like

Thuật toán bài này thì cũng đơn giản mà, muốn đếm tần số xuất hiện thì cứ sắp xếp cho nó gom lại từng đống rồi đếm thôi, nhát thì cứ 2 vòng for cho lẹ :smiley: . Còn môn CTDL + giải thuật thì em học nhiều chổ lắm nhưng chưa đủ :smiley: Sách Lê Minh Hoàng 1 ít, rồi trên trang geeksforseeks, … Học theo từng chủ đề thôi, hiện thì đang tìm hiểu về từng bài toán có thể dùng quy hoạch động.

3 Likes

Bài này dễ thì thấy các bạn lao vào làm. Chứ gặp bài khó hoặc bài nào chán và dài mà hỏi thế này thế này thì lăn quay hết =))

Chuẩn rồi, với cả thảo luận cũng tốt hơn.

Kaka, bị hốt hàng, :running: thôi

2 Likes

đang tính là quẩy từng chút thì bạn Minh Vũ post thẳng cái code. ọc máu luôn anh Đạt

1 Like

Cái này thuộc về c++ rồi. Mình đang hỏi về C mà

1 Like

C++ chuyển qua C có gì khó đâu bạn @Kelvin_Nguy_n
thêm stdio.h rồi cout ~ printf thôi mà :smiley:

Chổ này là sao, Chả hiểu gì? :blush:

2 Likes

sizeof là kích cở đó. hàm lấy kích thước

À, chỗ này @minh_vu_03 lười và sử dụng giải thuật std::sort để sắp xếp cho lẹ. Cái này là C++. Không thể chối cãi được ^^

bài này dùng c++ mới giải được àh, dùng C hok đc sao, hèn gì mình ngồi cả buổi mà vẫn hok suy nghĩ ra thuật toán đc :frowning:

1 Like

Có thể làm theo cách này sau khi sort

for (int i = 0; i < LENGTH; ++i)
{
	++currentFrequency;
	if( i == LENGTH -1 || datas[i] != datas[i+1])
	{
		if( currentFrequency > highestFrequency)
		{
			highestFrequency = currentFrequency;
			mostFrequent = datas[i];
		}
		
		currentFrequency = 0;
	}
}
2 Likes

cố tình viết chữ MẢNG, thấy nhiều bạn sai từ này quá :smile:

Hôm nay ta đã trở lại =)) bài này thì đếm từng phần tử rồi cho mấy thằng đếm vào 1 mảng mới. tìm max mảng mới thôi là được :v

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TTPT
{
    class Program
    {
        static void nhapmang(int[] a, int n)
        {
            for (int i = 0; i < n; i++)
            {
                Console.Write("a[" + i + "]=");
                a[i] = int.Parse(Console.ReadLine());
            }
        }
        static void xuatmang(int[] a, int n)
        {
            Console.Write("Hien thi mang:");
            for (int i = 0; i < n; i++)
                Console.Write(a[i]+ " ");
        }
        int kiemtra(int [] a,int n,int i) 
        { 
            int t=a[i]; 
            for (int j=0;j<i;j++) 
                if (t==a[j])return 0; 
            return 1; 
        }
        int demmang (int []a,int n,int i) 
        { 
            int t=a[i],j=0; 
            for (i=0;i<n;i++) 
            { 
                if (t==a[i]) j++; 
            } 
            return (j); 
        } 
        static void Main(string[] args)
        {
            Program newdemmang = new Program();
            Console.Write("Nhap so phan tu cua mang: ");
            int n = int.Parse(Console.ReadLine());
            int[] a = new int[20];
            nhapmang(a, n);
            xuatmang(a, n);
             
            int x = newdemmang.demmang(a, n, 0);
            newdemmang.kiemtra(a, n, 0);
            for (int i = 0; i < n; i++)
            {
                    Console.WriteLine("a["+ i+ "]"+ ":" + "demmang(a,n,i)" + "phan tu");
            }
            Console.ReadKey();
        }
    }
}

Trong c# em làm code như trên để tìm xem số lần xuất hiện của mỗi phần tử trong mảng. mà nó chỉ cho nhập mảng và hiển thị mảng, còn đếm số lần xuất hiện vẫn chưa được. anh/chị kiểm tra xem thuật toán trong hàm int demmang (int []a,int n,int i) int kiemtra(int [] a,int n,int i) sai ở đâu?

Kết quả thế này ạ.
. em tìm mãi không ra thuật toán sai chổ nào.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?