Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: [C] Kiểm tra mảng đối xứng hay không? Help me!

  1. #1
    Ngày gia nhập
    03 2007
    Nơi ở
    Quảng Ngãi
    Bài viết
    9

    Question [C] Kiểm tra mảng đối xứng hay không? Help me!

    liet ke mang con doi xung dai nhat trong mang?
    VD:1 2 2 1 7 9 8 8 9 7
    mang doi xung dai nhat la:7 9 8 8 9 7

    [mod].[/mod]
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 24-03-2007 lúc 01:16 AM. Lý do: Tên đề tài không hợp lệ, bài viết không dấu

  2. #2
    No Avatar
    Leon88 Khách

    #include<stdio.h>
    #include<conio.h>
    main()
    {
    int n,i,tam,xet,max,nho;
    int a[100];
    clrscr();
    printf("\nNhap vao so phan tu cua mang n : ");
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    {
    printf("\nNhap vao phan tu a[%d]: ",i);
    scanf("%d",&a[i]);
    }
    printf("\nDay so da nhap : \n\n");
    for (i=1;i<=n;i++) printf("%d ",a[i]);
    max=0;nho=0;
    printf("\n");
    for (i=1;i<=n;i++)
    {
    tam=0;
    if (a[i]==a[i+1])
    {
    xet=0;
    while (xet==0)
    {
    ++tam;
    if (a[i-tam]!=a[i+tam+1]) xet=1;
    }
    }
    if (max<=tam) {max=tam;nho=i;};
    }
    /*printf("%d %d",max,nho);*/
    printf("\nDay so doi xung \n\n");
    for (i=max-1;i>=0;i--)
    printf("%d ",a[nho-i]);
    for (i=1;i<=max;i++)
    printf("%d ",a[nho+i]);
    getch();
    }
    Bạn đem về test cái code của mình mới làm thử đi. Mình thấy cũng đúng

  3. #3
    No Avatar
    Leon88 Khách

    Ah, từ bài này làm mình nhớ đến 1 bài năm lớp 10 mình làm. Đề là : nhập vào 1 ma trận kích thước nxm rồi xuất ra ma trận đối xứng lớn nhất.
    Ví dụ :
    input
    2 2 4 3 5
    2 2 8 7 9
    5 3 6 5 6
    4 5 9 7 8
    output
    8 7 9
    6 5 6
    9 7 8

  4. #4
    Ngày gia nhập
    08 2006
    Bài viết
    19

    bài cậu làm chưa đúng hẳn. Do điều kiện:
    if (a[i]==a[i+1])
    bài chỉ chạy được khi dãy đối xứng max có số chẵn các phần tử. nếu số phần tử của nó là lẻ, phần tử chính giữa sẽ khác phần tử liền sau nó-> không chạy đúng
    VD: dãy 10 phần tử 1 2 3 4 4 3 2 1 9 10 thì chạy đúng
    dãy này: 1 2 3 4 3 2 1 9 8 9 thì chạy sai
    cậu chỉ cần chỉnh lại một chút là sẽ đúng hoàn toàn thôi

  5. #5
    No Avatar
    Leon88 Khách

    Trích dẫn Nguyên bản được gửi bởi melaptrinh Xem bài viết
    bài cậu làm chưa đúng hẳn. Do điều kiện:
    if (a[i]==a[i+1])
    bài chỉ chạy được khi dãy đối xứng max có số chẵn các phần tử. nếu số phần tử của nó là lẻ, phần tử chính giữa sẽ khác phần tử liền sau nó-> không chạy đúng
    VD: dãy 10 phần tử 1 2 3 4 4 3 2 1 9 10 thì chạy đúng
    dãy này: 1 2 3 4 3 2 1 9 8 9 thì chạy sai
    cậu chỉ cần chỉnh lại một chút là sẽ đúng hoàn toàn thôi
    Đối xứng có 2 loại 1 là : 1 2 2 1
    Loại 2 là đối xứng qua 1 số : 1 2 3 5 3 2 1
    Mình chỉ làm theo ví dụ của bạn đó nếu cần đối xứng qua 1 số thì cho bạn đó tự làm là dc rồi

  6. #6
    Ngày gia nhập
    03 2007
    Nơi ở
    Quảng Ngãi
    Bài viết
    9

    Mặc định [C] Kiểm tra mảng đối xứng hay không? Help me!

    bạn có thể giải giùm luôn trường hơp đối xứng qua 1 số ko?

  7. #7
    Ngày gia nhập
    01 2007
    Nơi ở
    TP HCM
    Bài viết
    11

    ác thật ngta bày cho 1 trường hợp rồi k tự mò trường hợp khác cứ lo ? k chịu tư duy!

  8. #8
    Ngày gia nhập
    02 2007
    Bài viết
    27

    Chương trình này đúng với mọi trường hợp, còn ứng dụng vào những bài khác thế nào thì các bạn tự lo nhé
    Code:
    //Kiem tra mang co doi xung hay ko
    #include <stdio.h>
    #include <conio.h>
    
    int checkDoiXung(int a[],int n);
    
    void main()
    {
    	int a[100],n,i;
    	clrscr();
    	printf(" Nhap so phan tu: ");
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    		{
    			printf("a[%d]= ",i);
    			scanf("%d",&a[i]);
    		}
    	printf("\n Mang da nhap la:\n");
    	for(i=0;i<n;i++)
    		printf("%d ",a[i]);
    	if(checkDoiXung(a,n))
    		printf("\n Mang doi xung");
    	else printf("\n Mang ko doi xung");
    	getch();
    }
    
    int checkDoiXung(int a[],int n)
    {
    	int i=0,j=n-1;
    	while(i<=j)
    		{
    			if(a[i]!=a[j]) return 0;
    			i++;
    			j--;
    		}
    	return 1;
    }


    Tucõi phước
    Tìnhdây oan

  9. #9
    Ngày gia nhập
    03 2007
    Bài viết
    6

    For(int i=0;i<n/2;i++)
    If(a[i]!=a[n-1-i]) return 0;
    return 1;
    Đây là điều kiện đúng nè.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn