Nhờ sửa lỗi bài tìm dãy đối xứng

#include<stdio.h>
int main()
{
    int A[20],i,j,n;
    printf("nhap day so xem co phai la doi xung hay khong\n Moi ban nhap cac phan tu ");
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        printf("A[%d]=",i);
        scanf("%d",&A[i]);
    }

    for(j=n-1,i=0; i<=j; i++,j--)
        if(A[i]==A[j])
            printf("day so doi xung");
        else printf("ko la day doi xung");
}

Mình muốn nó không hiển thị nhiều cái tên “day so doi xung” nhiều lần quá thì làm thế nào?
vd về dãy đối xứng như 12421 đây là dãy đối xứng

2 Likes

@Toi_Do bạn sửa lại cái tiêu đề nhé, tiêu đề chưa thể hiện được nội dung bạn muốn hỏi. Nếu các bạn khác cùng đặt chung tiêu đề “Mọi người xem giúp mình mã này với” thì làm sao biết được ai hỏi cái gì :frowning:

Đồng thời bạn cũng phải giải thích cái chương trình của bạn đang làm cái gì? Nếu bạn chỉ post code thì không ai biết code bạn viết cái gì, bị lỗi ở đâu. Thì khi đó không thể giúp bạn sửa lỗi được.

P/S: Đạt đã move bài bạn vào Programming > C. Đã sửa lại lỗi chính tả, đã sửa lại code nhìn cho đẹp hơn.

P/S2: Đạt đã sửa tiêu đề thành “Nhờ sửa lỗi bài tìm dãy đối xứng”. Bây giờ @Toi_Do cho biết đề bài đi, dãy đối xứng theo yêu cầu của bạn là dãy như thế nào.

4 Likes

vd 12521 đây là 1 dãy đối xứng.
Em Viết được mã này rồi nhưng mà nó hơi thừa tý in ra nhiều dòng chữ quá
có lệnh nào kết thúc được không ạ

2 Likes

cho em xin nỗi nha em mới vào room nên vẫn còn non nớt mong anh bỏ quá

À cái vụ post bài nhiều người bị lắm. Nhưng nếu em post bài thì em phải suy nghĩ cách post làm sao cho bạn em, người không học chung với em, hiểu em đang muốn hỏi cái gì.

Forum hay trong đời thật cũng vậy, em hỏi bạn em với nội dung y chang thì bạn em cũng thua à, vì nó không hiểu em đang hỏi cái gì :smiley:

thế 125521 có phải là dãy đối xứng luôn không?

P/S: Đây là cách post bài trong forum mình nè, em có thể “Quote” bài của anh để hỏi từng vấn đề cụ thể mà không cần phải post 2 bài liên tục. Như vậy nó rối forum.

3 Likes

e có thể sửa lại như sau:

// DayDoiXung.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "iostream"


int _tmain(int argc, _TCHAR* argv[])
{
	int A[20], i, j, n;
	printf("nhap day so xem co phai la doi xung hay khong\n Moi ban nhap cac phan tu ");
	scanf_s("%d", &n);
	for (i = 0; i<n; i++)
	{
		printf_s("A[%d]=", i);
		scanf_s("%d", &A[i]);
	}

	for (j = n - 1, i = 0; i <= j; i++, j--)
	if (A[i] != A[j])
	{
		printf_s("ko la day doi xung");
		int a;
		system("pause");
		return -1;
		
	}
	printf_s("day so doi xung");
	system("pause");
	return 0;
}


5 Likes

Của bác nếu dãy không đối xứng thì cuối cùng chương trình vẫn sẽ hiện thêm 1 dòng “day doi xung” :vhs:

1 Like

bạn có thể sửa vòng for của bạn:
…sửa:

for(j=n-1,i=0; i<=j; i++,j--)
        if(A[i]==A[j])
            printf("day so doi xung");
        else printf("ko la day doi xung");

===> thành:

int check=1;
for(j=n-1,i=0; i<=j; i++,j--)  if(A[i]!=A[j]) check=0;
if(check==1) printf("day so doi xung");
else printf("ko la day doi xung");
2 Likes

e sửa chữ break thành return hoặc dùng cờ hiệu cũng dc. hi

3 Likes

lệnh của anh mới quá em không biết anh giải thích em đi

đúng rồi không đối xứng vẫn thêm dòng đối xứng

Đâu có lệnh nào mới đâu bạn @Toi_Do??
int check là khai báo thêm 1 biến để check xem có là dãy đối xưng ko? ban đầu gán cho giá trị 1 - mặc định là đối xứng. trong vòng for, nếu có giá trị a[i] khác a[j] thì check sẽ gán bằng 0 - không đối xứng. ở dưới lệnh if chắc ko cần giải thích nữa nhé. :smile:

2 Likes

không nó tác dụng là chưa hợp lý nhé bạn, thật ra khi gặp a[i]!=a[j], thì nó sẽ thoát khỏi vòng lặp luôn. Nhưng vẫn chạy xuất dưới nên xuất ra thêm câu. Vì vậy chỉ cần đổi lại break=return là ok nhé bạn.
Lúc trưa code chay, nên k chạy code để debug dc.H up code hoàn chỉnh nhá.

4 Likes

Chưa hiểu lắm ý bạn nói

Muốn chương trình k thoát ra thì mình có hàm system("pause") kìa bạn.

1 Like
#include <stdio.h>
int main()
{
    int A[20],i,j,n;
    printf("Nhap day so xem co phai la doi xung hay khong\nMoi ban nhap cac phan tu : ");
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        printf("A[%d] = ", i);
        scanf("%d", &A[i]);
    }
    for(j = n - 1, i = 0; i <= j; i++, j--)
        if(A[i] == A[j])
        {
            printf("Day so doi xung.");
            break;
        }
        else
        {
            printf("Khong phai la day so doi xung.");
            break;
        }
    return 0;
}

Dãy đối xứng là phần tử đầu đối xứng với phần tử cuối, phần tử thứ 2 đối xứng phần tử kề phần tử cuối … qua phần tử ở giữa làm tâm đối xứng hoặc không có phần tử ở giữa.
Dãy 125521 là dãy đối xứng, dãy 12123 không phải là dãy đối xứng.

3 Likes

tại em nghĩ sâu xa nhìn thấy lệnh check tưởng cái gì!!! nên khong đọc nữa

1 Like

mà câu lệnh anh hay thật ngắn gọn rễ hiểu chác anh tư giỏi lắm nhỉ

1 Like
#include<stdio.h>
int doi_xung(int so_nguyen[],int so_phan_tu);
void nhap_mang(int so_nguyen[],int so_phan_tu);
int main() {
    int so_phan_tu,so_nguyen[100];
    printf("Nhap so phan tu cua mang can tao:");
    scanf("%d",&so_phan_tu);
    nhap_mang(so_nguyen,so_phan_tu);
    if(doi_xung(so_nguyen,so_phan_tu))
        printf("Mang da nhap la mang doi xung.");
    else
        printf("Mang da nhap khong phai la mang doi xung.");
    return 0;
}
void nhap_mang(int so_nguyen[],int so_phan_tu) {
    int i;
    for(i=0;i<so_phan_tu;i++) {
        printf("so_nguyen[%d]=",i);
        scanf("%d",&so_nguyen[i]);
    }
}
    int doi_xung(int so_nguyen[],int so_phan_tu) {
        int i,j,check;
        for(i=0,j=(so_phan_tu-1); i<((so_phan_tu-1)/2.0)&&j>((so_phan_tu-1)/2); j--,i++)
            if(so_nguyen[i]==so_nguyen[j])
                check=1;
            else {
                check=0;
                break;
            }
        return check;
    }

Code trên mình dùng hàm để viết. Để hạn chế in dòng chữ như bạn đã nói thì mình dùng 1 biến check khi viết hàm doi_xung, khi kiểm tra điều kiện:
if(so_nguyen[i]==so_nguyen[j])
Nếu đúng thì gán check=1, nếu sai thì gán check=0 và thoát khỏi vòng lặp for bằng lệnh break. Sau đó trả về hàm main như trên.
Bạn cứ chạy thử code của mình nếu có gì không hiểu thì cứ hỏi.

2 Likes

sao dài thế anh…

1 Like

if(doi_xung(so_nguyen,so_phan_tu))
printf(“Mang da nhap la mang doi xung.”);
else
printf(“Mang da nhap khong phai la mang doi xung.”);
return 0;
em không hiểu cái này anh ơi

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