30/09/2018, 18:55

Cho mình hỏi lỗi mình như thế nào ạ

chào mọi người đây là đề bài ạ

và đây là code của e

#include <stdio.h>
#include <conio.h>
#define max 100
void nhapmang(int a[max], int* n);
void caua(int a[max], int n);
void main()
{
	int a[max], n;
	caua(a, &n);
	getch();
}
void nhapmang(int a[max], int* n)
{
	printf("nhap n: ");
	do
		scanf("%d",&(*n));
	while(*n<1);
	for(int i = 0; i < *n; i++)
	{
		printf("so %d: ", i + 1);
		scanf("%d",&a[i]);
	}
}
void caua(int a[max], int n)
{
	int i, max;
	max = a[0];
	for(i = 0; i < n ; i++)
	{
		if(a[i]>max)
			max = a[i];
	}
	int k;
	k=a[0];
	for(i = 0; i < n ; i++)
	{
		if(k > a[i] && k < max)
			k = a[i];
	}
	printf("k lon nhi la %d va vi tri la",k,i +1 );
}
```cho mình hỏi lỗi là gì ạ và mong mọi người giúp
17XGOD viết 20:59 ngày 30/09/2018
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#define max 100
void nhapmang(int a[max], int* n);
void caua(int a[max], int n);
void main()
{
	int a[max], n;
	caua(a, &n);
	getch();
}
void nhapmang(int a[max], int* n)
{
	printf("nhap n: ");
	do
		scanf("%d",&(*n));
	while(*n&lt;1);
	for(int i = 0; i &lt; *n; i++)
	{
		printf("so %d: ", i + 1);
		scanf("%d",&a[i]);
	}
}
void caua(int a[max], int n)
{
	int i, max;
	max = a[0];
	for(i = 0; i &lt; n ; i++)
	{
		if(a[i]&gt;max)
			max = a[i];
	}
	int k;
	k=a[0];
	for(i = 0; i &lt; n ; i++)
	{
		if(k &gt; a[i] && k &lt; max)
			k = a[i];
	}
	printf("k lon nhi la %d va vi tri la",k,i +1 );
}
17XGOD viết 21:05 ngày 30/09/2018

lỗi như thế nào vậy bạn

Lâm Khả Hân viết 20:57 ngày 30/09/2018
  1. (9) ‘caua’ : cannot convert parameter 2 from ‘int *’ to ‘int’
    There is no context in which this conversion is possible
  2. (26): error C2059: syntax error : ‘constant’
  3. (27): error C2065: ‘k’ : undeclared identifier
  4. (31): error C2106: ‘=’ : left operand must be l-value
    4 lỗi đó bạn
17XGOD viết 20:56 ngày 30/09/2018
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void nhapsoduong(int &n){
	do{
		printf("Nhap so >0: ");
		scanf("%d",&n);
	}while(n<=0);
}
void nhapmang(int a[],int n){
	for (int i=0;i<n;i++)
		do{
			printf("Nhap phan tu thu %d>0: ",i+1);
			scanf("%d",&a[i]);
		}while(a[i]<=0);
}
int kiemtrasonguyento(int n){
	if (n == 1) return 0;
	else for (int i=2;i<=n/2;i++)
			if (n%i==0) return 0;
	return 1;
}
void timSNTmax(int a[],int n){
	int b[100]={},max;
	for (int i=0;i<n;i++)
		if (kiemtrasonguyento(a[i])==1) b[i]=a[i];
	max=b[0];
	for (int i=1;i<n;i++)
		if (max<b[i]) max=b[i];
	if(max==0) printf("Khong co so lon nhat");
	else printf("So nguyen to max = %d",max);
}
main(){
	int mang[100],n;
	nhapsoduong(n);
	nhapmang(mang,n);
	timSNTmax(mang,n);
	getch();
}

Bạn tham khảo thử bài này rồi chỉnh lại bài bạn thử

Lâm Khả Hân viết 21:09 ngày 30/09/2018

cảm ơn bạn để mình xem thử lại

*grab popcorn* viết 21:10 ngày 30/09/2018

http://ideone.com/3o67aa

#define max 100 mà lại khai báo biến max -> 1 lỗi
void caua(int a[], int n) -> 2 lỗi, int *n mới đúng do bạn truyền vào 1 con trỏ
scanf("%d",&(*n)); -> 3 lỗi, chỉ cần scanf("%d",n); là ok rồi

Còn 1 số lỗi logic mà mình có sửa trong code rồi.

Lâm Khả Hân viết 21:01 ngày 30/09/2018

cảm ơn nha bạn mà cho mình hỏi tại sao phải là k rất nhỏ và
if(k < a[i] && a[i] < max)
vậy bạn

Lâm Khả Hân viết 20:55 ngày 30/09/2018

à mình hiểu r cảm ơn bạn

Interns viết 21:09 ngày 30/09/2018

Còn câu a thì sao nhỉ có ai có ý tưởng nào tối ưu không

Lâm Khả Hân viết 21:10 ngày 30/09/2018

^^ bạn tối ưu thế nào

*grab popcorn* viết 21:03 ngày 30/09/2018

Hmm, mình sẽ làm là tìm max ngay lúc nhập mảng
Và tìm 2nd max sau khi nhập xong :>
Vậy chỉ tốn 2 for thay vì 3 for như trên.

Interns viết 21:00 ngày 30/09/2018
int max_1 = arr[0]; //số lớn nhất
int max_2 = -1;     //số lớn nhì
    
    for(int i=1; i<n; i++)
    {
        if(arr[i] > max_1)
        {
            max_1 = arr[i];
        }
        if((arr[i] > max_2) && (arr[i] != max_1))
            max_2 = arr[i];
    }

Mình làm thế này không biết có tối ưu không @drgnz có cách nào hay hơn không nhỉ??

*grab popcorn* viết 21:08 ngày 30/09/2018

mình chỉ nghĩ ra cách đó thôi.
Tính sort rồi lấy 2 phần tử đầu, nhưng bubble sort là O(n^2), qsort thì là O(nlogn)
Cả 2 đều thua 2 vòng for cho trường hợp n lớn.

À mà code bạn có test bị sai
http://ideone.com/GCeyX7

Bài liên quan
0