30/09/2018, 16:28

Tìm số chính phương nhỏ nhất trong mảng 1 chiều

Đây là 2 hàm e làm để tìm số chính phương nhỏ nhất , nhưng không ra

//ham kiem tra scp
static bool ktscp(int n)
{
    if (n==(int) Math.Sqrt(n) * (int) Math.Sqrt(n))
        return true;
    else
        return false ;
}


//ham tim scp nho nhat
public int sochinhphuong(int[] MangMC, int n)
{
    int min=0,dem=0;

    for(int i=0;i<n;i++)
    {
        if (ktscp(MangMC[i]) == true)
        {
            dem++;
        }

    }

    if (dem == 0)
    {
        Console.WriteLine("Mang khong co so chinh phuong nao");
        return -1;
    }

    else
    {
        for (int i = 0; i < n; i++)
        {
            if (ktscp(MangMC[i]) == true)
            {
                if (min > MangMC[i])
                    min = MangMC[i];
            }
        }

    }
    return min;
}

kết quả như ý .
Bạn nào giúp mình với

X viết 18:33 ngày 30/09/2018

code khó nhìn quá @@ mà nhìn sơ qua chắc là sai chỗ min = 0. a nghĩ là min = MangMC[0] :))

Lê Huy viết 18:28 ngày 30/09/2018

cũng không được anh ơi . Em đã sửa lại như anh nói . Hàm tìm số chính phương em đã test đúng , nhưng lại tìm số chính phương nhỏ nhất không ra .

Nguyễn Minh Dũng viết 18:42 ngày 30/09/2018

Ngay từ đầu em gắn min=0 thì sao điều kiện dưới đúng được.

if (ktscp(MangMC[i]) == true)
{
    if (min > MangMC[i])
        min = MangMC[i];
}

Nên gán min bằng một số chính phương nào đấy trước.

Lê Huy viết 18:32 ngày 30/09/2018

ý anh là gán min cho một số chính phương thực hả anh .

Nguyễn Minh Dũng viết 18:40 ngày 30/09/2018

Nếu trong mảng MangMC có số chính phương nhỏ nhất là số 4. Mà min của em bằng 0. Thì lấy gì điều kiện này đúng được.

if (min > MangMC[i])   
    min = MangMC[i];

code khó nhìn quá @@ mà nhìn sơ qua chắc là sai chỗ min = 0. a nghĩ là min = MangMC[0] :))

Đã thấy cái min = 0 rồi mà còn bảo min = MangMC[0]. Phải là một số chính phương có thật chứ, MangMC[0] đâu chắc chắn là số chính phương đâu.

X viết 18:31 ngày 30/09/2018

à quên, :)) duyệt tìm 1 số chính phương trước rồi lấy vị trí nó @@ xong gán min = MangMC[vitri].

Lê Huy viết 18:34 ngày 30/09/2018

em đã làm lại như thế này , nhưng kết quả vẫn ko đúng , sai chỗ này xin anh chỉ giáo
public int sochinhphuong(int[] MangMC, int n)
{
int min=0,a=0;
int dem = 0;
for(int i=0;i<n;i++)
{
if(ktscp(MangMC[i])== true)
{
dem++;
min = MangMC[i];
a = i;
break;
}
}
if (dem == 0)
return -1;
for(int i=a + 1; i< n;i++)
{
if( (ktscp(MangMC[i]) == true )&& (min > MangMC[i]))
min = MangMC[i];
}
return min;
}

Nguyễn Minh Dũng viết 18:31 ngày 30/09/2018

Sửa lại một chút của cái code đầu tiên là được mà

public int sochinhphuong(int[] MangMC, int n)
{
    int min=0,dem=0;

    for(int i=0; i<n; i++)
    {
        if (ktscp(MangMC[i]) == true)
        {
            dem++;
            if (min == 0)
            {
                min = MangMC[i];
            }
        }
    }

    if (dem == 0)
    {
        Console.WriteLine("Mang khong co so chinh phuong nao");
        return -1;
    }
    else
    {
        for (int i = 0; i < n; i++)
        {
            if (ktscp(MangMC[i]) == true)
            {
                if (min > MangMC[i])
                    min = MangMC[i];
            }
        }
    }
    return min;
}
Lê Huy viết 18:38 ngày 30/09/2018

e cam on . Em sai khi truyền tham biến . Chứ ko phải hàm sai . Chắc phải coi lại tham biến thôi .
P/S : mới học c# dc 1 tuần

Nguyễn Minh Dũng viết 18:41 ngày 30/09/2018

This topic was automatically closed after 24 hours. New replies are no longer allowed.

Bài liên quan
0