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é !

  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á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