Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Một bài toán quét cạn rất khó chịu !!!

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    0

    Mặc định Một bài toán quét cạn rất khó chịu !!!

    Đề bài: Hãy thay tất cả dấu "?" bằng các dấu + - * / để sao cho bài toán có trị là 35. Bài toán là:

    ((((((1?2)?3)?4)?5)?6)?7)=35


    =====
    Nhờ các anh giúp giùm em !

    Cảm ơn nhiều ! Cho em xin code luôn nhé !
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bài này không khó chịu !!^^! nếu bỏ các dấu ngoặc đi thì mới "khó chịu" vì phải xét độ ưu tiên của các toán tử, ở đây độ ưu tiên có sẵn rồi nên cứ duyệt vô tư thôi.
    Gợi ý cho bạn thủ tục đệ qui như sau :
    Backtrack(int num, int result)
    với num là các số : 1, 2, 3, 4, 5, 6, 7.
    Do giới hạn chỉ 7 số, hỏi phục hồi gì cho mất công, tính thẳng luôn, được thì lưu kết quả in ra, không được thì thui.
    - nếu dấu "+" Backtrack(number + 1, result + num);
    - nếu dấu "-" Backtrack(number + 1, result - num);
    - nếu dấu "*" Backtrack(number + 1, result * num);
    - nếu dấu "/" Backtrack(number + 1, result / num);

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Bài này không khó chịu !!^^! nếu bỏ các dấu ngoặc đi thì mới "khó chịu" vì phải xét độ ưu tiên của các toán tử, ở đây độ ưu tiên có sẵn rồi nên cứ duyệt vô tư thôi.
    Gợi ý cho bạn thủ tục đệ qui như sau :
    Code:
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    char dau[7];
    float kq;
    int n;
    //========================================================
    void inkq(){
    	cout << "((((((1" << dau[1] << "2)" << dau[2] << "3)" << dau[3]<< "4)"
    			<< dau[4] << "5)" << dau[5] << "6)" << dau[6] << "7)=" << n << endl;
    }
    //========================================================
    float thuchien_pheptoan(float x,float y, char ch){
    	if (ch=='+') return x+y;
    	else if (ch=='-') return x-y;
    	else if (ch=='/') return x/y;
    	else return x*y;
    }
    //========================================================
    void tinhtoan(){
    	kq = thuchien_pheptoan(1,2,dau[1]);
    	kq = thuchien_pheptoan(kq,3,dau[2]);
    	kq = thuchien_pheptoan(kq,4,dau[3]);
    	kq = thuchien_pheptoan(kq,5,dau[4]);
    	kq = thuchien_pheptoan(kq,6,dau[5]);
    	kq = thuchien_pheptoan(kq,7,dau[6]);
    	if (kq == n) inkq();
    }
    //========================================================
    void thu_dau(int i){
    	if (i==7) tinhtoan();
    	else {
    		dau[i] = '+';
    		thu_dau(i+1);
    		dau[i] = '-';
    		thu_dau(i+1);
    		dau[i] = '/';
    		thu_dau(i+1);
    		dau[i] = '*';
    		thu_dau(i+1);
    	}
    }
    //========================================================
    main(){
    	cout << "Nhap ket qua muon tim:";
    	cin >> n;
    	thu_dau(1);
    	cin.ignore(2);
    }
    Bài này đưa ra kết quả = n, tổng quát hơn số 35
    Đã được chỉnh sửa lần cuối bởi metal_shield : 09-12-2007 lúc 12:03 AM. Lý do: Quên ko cho code

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Hì hì ! Đúng là cách của Metal hay thật, vì có thể tổng quát cho n ^^!
    Cách mình thì chỉ xài cho bài này thôi, nếu muốn xài cho N thì phải thêm thắt 1 chút nữa mà có lẽ không cần thiết và dùng cách của Metal ngắn gọn và dễ hiểu hơn, ở đây mình cũng duyệt đệ qui, tư tưởng giống nhau khác cách trình bày 1 tí thôi.
    PHP Code:
    #include <iostream>
    #include <string>

    std::string _strNum;

    void deleteString(std::string &, intint);
    void Backtrack(intfloat);

    int main()
    {
        
    _strNum '1';
        
    Backtrack(2,1);

        return 
    0;
    }

    void deleteString(std::string &Aint positionint numberElement)
    {
        for (
    int x positionA.length(); x++) 
        {
            
    A[x] = A[x+position];
        }
        
    A.erase(A.length()-numberElement);
    }

    void Backtrack(int numfloat result)
    {
        if(
    num == 8)
        {
            if(
    result == 35)
            {
                
    std::cout << "((((((" << _strNum << " = 35 ";
                
    std::cout << "\n\n";
                return;
            }
        }
        else
        {
            
    _strNum _strNum '+' char(num 48) + ')';
            
    Backtrack(num 1result+num);
            
    deleteString(_strNum_strNum.length()-23);

            
            
    _strNum _strNum '-' char(num 48) + ')';
            
    Backtrack(num 1result-num);
            
    deleteString(_strNum_strNum.length()-23);
        
            
    _strNum _strNum '*' char(num 48) + ')';
            
    Backtrack(num 1result*num);
            
    deleteString(_strNum_strNum.length()-23);
        
            
    _strNum _strNum '/' char(num 48) + ')';
            
    Backtrack(num 1result/num);
            
    deleteString(_strNum_strNum.length()-23);
        }


  5. #5
    Ngày gia nhập
    01 2008
    Bài viết
    140

    PHP Code:
    //dien vao dau ? la cac phep tinh +,-,*,/ thoa man:(((((1?2)?3)?4)?5)?6)=35
    #include<stdio.h>
    #define MAX    6
    #define KETQUA 35
    int dan[20];
    float kq=1;
    void inketqua();
    void tinh(float a,int b,int ptinh,int kieu);
    void lap(int n);
     
    main()
    {
        
    lap(2);
    }
    void tinh(float a,int bint ptinhint kieu)
    {
        if(
    kieu==1)
        {
            switch(
    ptinh)
            {
            case 
    1kq=a+b;break;
            case 
    2kq=a-b;break;
            case 
    3kq=a*b;break;
            case 
    4:
                if (
    b==0) break;
                
    kq=a/b;break;
            }
            }
        else
        {
            switch(
    ptinh)
            {
                case 
    1kq=a-b;break;
                case 
    2kq=a+b;break;
                case 
    3:
                if (
    b==0) break;
                
    kq=a/b;break;
                case 
    4kq=a*b;break;
            }
        }
    /*
    printf("\nkq:%.1f,a:%.1f,b:%d,ptinh:%d,kieu:%d\n",kq,a,b,ptinh,kieu);
    printf("\nphep tinh\n");
        {
        int j;
        for(j=1;j<10;j++)
            printf("%d ",dan[j]);
        }
    if(getch()=='x') exit();
    */
    }
    void lap(int n)
    {
        
    int i;
        if(
    n<1printf("khong tinh duoc hoac lam sai"),exit();
        else
            {
                for(
    i=1;i<=4;i++)
                {
                 
    //    printf("\nthu phep tinh\n");
                    
    dan[n-1]=i;
                    
    tinh(kq,n,i,1);
                    if((int)
    kq==KETQUA &&n==MAX)
                        
    inketqua();                             
                    else if( (int)
    kq<KETQUA && n<MAX)
                    {
                   
    //        printf("\nthu phep toan tiep theo\n");
                        
    dan[n]=i,lap(n+1);
                    }
                    else
                    {
                     
    //    printf("\nxoa ket qua\n");
                        
    dan[n-1]=0;
                        
    dan[n]=0;
                        
    tinh(kq,n,i,2);
                    }
                }

      
    //    printf("\nxoa ket qua va lui mot buoc\n");
        
    tinh(kq,n-1,dan[n-2],2);
      
    //    printf("\n luoi mot buoc\n");
        
    dan[n-1]=0;
        }
    }
    void inketqua()
    {
        
    int i,kq=1;
        
        
    printf("\nKET QUA: ");
        for(
    i=1;i<MAX;i++)
            
    printf("[");
        
    printf("1");    
        for(
    i=2;i<=MAX;i++)
        {
            if(
    dan[i-1]==1)
                
    printf("+"),kq+=i;
            else if(
    dan[i-1]==2)
                
    printf("-"),kq-=i;
            else if(
    dan[i-1]==3)
                
    printf("*"),kq*=i;
            else if(
    dan[i-1]==4)
                
    printf("/"),kq/=i;
            
    printf("%d]",i);                    
        }
        
    printf("=%d",kq);
        
    printf(KETQUA==kq?"\tTrue":"\tFalse");
        
    printf("\n\nENTER DE KET THUC ");
        
    getch();
        exit();

    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Các đề tài tương tự

  1. học lập trình web khó hơn hay lập trình ứng dụng khó hơn?
    Gửi bởi mr.star_insky trong diễn đàn Kinh nghiệm CNTT
    Trả lời: 15
    Bài viết cuối: 19-12-2015, 08:05 PM
  2. Câu đố khó
    Gửi bởi dkbcnncb11 trong diễn đàn Giải trí - Thư giãn
    Trả lời: 10
    Bài viết cuối: 26-10-2010, 07:31 AM
  3. Bài về đồ thị khó quá
    Gửi bởi de.itvn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 19-03-2008, 10:19 AM
  4. một câu hỏi khó hiểu quá
    Gửi bởi darkryte trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 15-05-2007, 01:00 AM

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