Thực hiện phân chia chỉ sử dụng bổ sung


8

Có một câu hỏi trên trang web yêu cầu thực hiện phân chia mà không sử dụng phân chia.

Trong trường hợp của tôi, tôi yêu cầu bạn làm tương tự, nhưng chỉ sử dụng phép cộng.

Điều này có nghĩa là về cơ bản: phép cộng là toán tử hoặc hàm duy nhất được phép hoạt động trên các số và trả về các số khác (nghĩa là không trừ, nhân, lũy thừa, đảo ngược bit, v.v.). Những thứ như nếu các câu lệnh, toán tử gán và so sánh và cho các vòng lặp vẫn được cho phép, miễn là trong phạm vi đó, bạn vẫn chỉ sử dụng phép cộng.

Nhiệm vụ của bạn là xây dựng một hàm divide(a, b)lấy hai số nguyên dương abtrả về kết quả ađược chia cho bvà làm tròn về 0, nhưng sử dụng phép cộng và không có toán tử số học nào khác, và không có cấu trúc dữ liệu nào khác ngoài các số.

Mã này rằng chiến thắng sẽ là người đòi hỏi các hoạt động bổ sung ít nhất phải được thực hiện trên các thiết lập đầu vào nơi akhác nhau từ 1đến 200bthay đổi từ 1tới a.

Để theo dõi điều này, bạn có thể xây dựng một phiên bản mã thay thế của mình thay thế mọi phiên bản a + bvới add(a, b)và chương trình addđể tăng một add_usedbiến toàn cục cũng như trả về tổng của hai số.


Tôi có lẽ sẽ không chấp nhận bất kỳ câu trả lời nào, chỉ vì có quá nhiều sơ hở trong câu hỏi này để nó có ý nghĩa.
Joe Z.

1
Kinh doanh điện tử đã trả lời thử thách tốt, imho. Một bảng tra cứu giải quyết các thách thức mà không cần bất kỳ bổ sung. Vâng, nó hơi hài hước, nhưng cái quái gì vậy? Tôi cũng thích cách tiếp cận của Julian Kuhn. Bạn đã di chuyển các cột gôn để loại bỏ mục nhập của anh ấy. Điều đó, với tôi, là không công bằng.
DavidC

Tôi đồng ý rằng anh ấy đã trả lời thử thách tốt, và tôi đã nâng cao câu trả lời của anh ấy cho điều đó. Nhưng cảm thấy sai lầm khi chấp nhận một câu trả lời chỉ vì các cột gôn được đặt không chính xác ở vị trí đầu tiên.
Joe Z.

Bạn quản lý nó để loại bỏ 2 câu trả lời của tôi. Ok, cái đầu tiên đã sử dụng hàm chia (lúc đó không phải là toán tử), vì vậy tốt hơn hết là xóa nó đi.
Julian Kuhn

Câu trả lời:


17

Viết quy tắc là khó, đặc biệt các quy tắc này chứa động cơ để tránh bổ sung bằng mọi giá.

Có một giải thưởng cho câu trả lời vô lý nhất?

JavaScript - 0 bổ sung

Bây giờ với phương pháp dự phòng thực hiện một giải pháp ẩn cho các hình lớn hơn abcấu trúc nhỏ gọn hơn một chút để không phá vỡ giới hạn ký tự. (Pfff, 30000 ký tự. Đây là gì? Twitter?) Vẫn không có bổ sung trong phạm vi đo.

function divide(a,b){
    if(a<b){
        return 0
    }
    if(b==1){
        return a
    }
    if(b==2){
        if(a<4){return 1}
        if(a<6){return 2}
        if(a<8){return 3}
        if(a<10){return 4}
        if(a<12){return 5}
        if(a<14){return 6}
        if(a<16){return 7}
        if(a<18){return 8}
        if(a<20){return 9}
        if(a<22){return 10}
        if(a<24){return 11}
        if(a<26){return 12}
        if(a<28){return 13}
        if(a<30){return 14}
        if(a<32){return 15}
        if(a<34){return 16}
        if(a<36){return 17}
        if(a<38){return 18}
        if(a<40){return 19}
        if(a<42){return 20}
        if(a<44){return 21}
        if(a<46){return 22}
        if(a<48){return 23}
        if(a<50){return 24}
        if(a<52){return 25}
        if(a<54){return 26}
        if(a<56){return 27}
        if(a<58){return 28}
        if(a<60){return 29}
        if(a<62){return 30}
        if(a<64){return 31}
        if(a<66){return 32}
        if(a<68){return 33}
        if(a<70){return 34}
        if(a<72){return 35}
        if(a<74){return 36}
        if(a<76){return 37}
        if(a<78){return 38}
        if(a<80){return 39}
        if(a<82){return 40}
        if(a<84){return 41}
        if(a<86){return 42}
        if(a<88){return 43}
        if(a<90){return 44}
        if(a<92){return 45}
        if(a<94){return 46}
        if(a<96){return 47}
        if(a<98){return 48}
        if(a<100){return 49}
        if(a<102){return 50}
        if(a<104){return 51}
        if(a<106){return 52}
        if(a<108){return 53}
        if(a<110){return 54}
        if(a<112){return 55}
        if(a<114){return 56}
        if(a<116){return 57}
        if(a<118){return 58}
        if(a<120){return 59}
        if(a<122){return 60}
        if(a<124){return 61}
        if(a<126){return 62}
        if(a<128){return 63}
        if(a<130){return 64}
        if(a<132){return 65}
        if(a<134){return 66}
        if(a<136){return 67}
        if(a<138){return 68}
        if(a<140){return 69}
        if(a<142){return 70}
        if(a<144){return 71}
        if(a<146){return 72}
        if(a<148){return 73}
        if(a<150){return 74}
        if(a<152){return 75}
        if(a<154){return 76}
        if(a<156){return 77}
        if(a<158){return 78}
        if(a<160){return 79}
        if(a<162){return 80}
        if(a<164){return 81}
        if(a<166){return 82}
        if(a<168){return 83}
        if(a<170){return 84}
        if(a<172){return 85}
        if(a<174){return 86}
        if(a<176){return 87}
        if(a<178){return 88}
        if(a<180){return 89}
        if(a<182){return 90}
        if(a<184){return 91}
        if(a<186){return 92}
        if(a<188){return 93}
        if(a<190){return 94}
        if(a<192){return 95}
        if(a<194){return 96}
        if(a<196){return 97}
        if(a<198){return 98}
        if(a<200){return 99}
        if(a<202){return 100}
    }
    if(b==3){
        if(a<6){return 1}
        if(a<9){return 2}
        if(a<12){return 3}
        if(a<15){return 4}
        if(a<18){return 5}
        if(a<21){return 6}
        if(a<24){return 7}
        if(a<27){return 8}
        if(a<30){return 9}
        if(a<33){return 10}
        if(a<36){return 11}
        if(a<39){return 12}
        if(a<42){return 13}
        if(a<45){return 14}
        if(a<48){return 15}
        if(a<51){return 16}
        if(a<54){return 17}
        if(a<57){return 18}
        if(a<60){return 19}
        if(a<63){return 20}
        if(a<66){return 21}
        if(a<69){return 22}
        if(a<72){return 23}
        if(a<75){return 24}
        if(a<78){return 25}
        if(a<81){return 26}
        if(a<84){return 27}
        if(a<87){return 28}
        if(a<90){return 29}
        if(a<93){return 30}
        if(a<96){return 31}
        if(a<99){return 32}
        if(a<102){return 33}
        if(a<105){return 34}
        if(a<108){return 35}
        if(a<111){return 36}
        if(a<114){return 37}
        if(a<117){return 38}
        if(a<120){return 39}
        if(a<123){return 40}
        if(a<126){return 41}
        if(a<129){return 42}
        if(a<132){return 43}
        if(a<135){return 44}
        if(a<138){return 45}
        if(a<141){return 46}
        if(a<144){return 47}
        if(a<147){return 48}
        if(a<150){return 49}
        if(a<153){return 50}
        if(a<156){return 51}
        if(a<159){return 52}
        if(a<162){return 53}
        if(a<165){return 54}
        if(a<168){return 55}
        if(a<171){return 56}
        if(a<174){return 57}
        if(a<177){return 58}
        if(a<180){return 59}
        if(a<183){return 60}
        if(a<186){return 61}
        if(a<189){return 62}
        if(a<192){return 63}
        if(a<195){return 64}
        if(a<198){return 65}
        if(a<201){return 66}
    }
    if(b==4){
        if(a<8){return 1}
        if(a<12){return 2}
        if(a<16){return 3}
        if(a<20){return 4}
        if(a<24){return 5}
        if(a<28){return 6}
        if(a<32){return 7}
        if(a<36){return 8}
        if(a<40){return 9}
        if(a<44){return 10}
        if(a<48){return 11}
        if(a<52){return 12}
        if(a<56){return 13}
        if(a<60){return 14}
        if(a<64){return 15}
        if(a<68){return 16}
        if(a<72){return 17}
        if(a<76){return 18}
        if(a<80){return 19}
        if(a<84){return 20}
        if(a<88){return 21}
        if(a<92){return 22}
        if(a<96){return 23}
        if(a<100){return 24}
        if(a<104){return 25}
        if(a<108){return 26}
        if(a<112){return 27}
        if(a<116){return 28}
        if(a<120){return 29}
        if(a<124){return 30}
        if(a<128){return 31}
        if(a<132){return 32}
        if(a<136){return 33}
        if(a<140){return 34}
        if(a<144){return 35}
        if(a<148){return 36}
        if(a<152){return 37}
        if(a<156){return 38}
        if(a<160){return 39}
        if(a<164){return 40}
        if(a<168){return 41}
        if(a<172){return 42}
        if(a<176){return 43}
        if(a<180){return 44}
        if(a<184){return 45}
        if(a<188){return 46}
        if(a<192){return 47}
        if(a<196){return 48}
        if(a<200){return 49}
        if(a<204){return 50}
    }
    if(b==5){
        if(a<10){return 1}
        if(a<15){return 2}
        if(a<20){return 3}
        if(a<25){return 4}
        if(a<30){return 5}
        if(a<35){return 6}
        if(a<40){return 7}
        if(a<45){return 8}
        if(a<50){return 9}
        if(a<55){return 10}
        if(a<60){return 11}
        if(a<65){return 12}
        if(a<70){return 13}
        if(a<75){return 14}
        if(a<80){return 15}
        if(a<85){return 16}
        if(a<90){return 17}
        if(a<95){return 18}
        if(a<100){return 19}
        if(a<105){return 20}
        if(a<110){return 21}
        if(a<115){return 22}
        if(a<120){return 23}
        if(a<125){return 24}
        if(a<130){return 25}
        if(a<135){return 26}
        if(a<140){return 27}
        if(a<145){return 28}
        if(a<150){return 29}
        if(a<155){return 30}
        if(a<160){return 31}
        if(a<165){return 32}
        if(a<170){return 33}
        if(a<175){return 34}
        if(a<180){return 35}
        if(a<185){return 36}
        if(a<190){return 37}
        if(a<195){return 38}
        if(a<200){return 39}
        if(a<205){return 40}
    }
    if(b==6){
        if(a<12){return 1}
        if(a<18){return 2}
        if(a<24){return 3}
        if(a<30){return 4}
        if(a<36){return 5}
        if(a<42){return 6}
        if(a<48){return 7}
        if(a<54){return 8}
        if(a<60){return 9}
        if(a<66){return 10}
        if(a<72){return 11}
        if(a<78){return 12}
        if(a<84){return 13}
        if(a<90){return 14}
        if(a<96){return 15}
        if(a<102){return 16}
        if(a<108){return 17}
        if(a<114){return 18}
        if(a<120){return 19}
        if(a<126){return 20}
        if(a<132){return 21}
        if(a<138){return 22}
        if(a<144){return 23}
        if(a<150){return 24}
        if(a<156){return 25}
        if(a<162){return 26}
        if(a<168){return 27}
        if(a<174){return 28}
        if(a<180){return 29}
        if(a<186){return 30}
        if(a<192){return 31}
        if(a<198){return 32}
        if(a<204){return 33}
    }
    if(b==7){
        if(a<14){return 1}
        if(a<21){return 2}
        if(a<28){return 3}
        if(a<35){return 4}
        if(a<42){return 5}
        if(a<49){return 6}
        if(a<56){return 7}
        if(a<63){return 8}
        if(a<70){return 9}
        if(a<77){return 10}
        if(a<84){return 11}
        if(a<91){return 12}
        if(a<98){return 13}
        if(a<105){return 14}
        if(a<112){return 15}
        if(a<119){return 16}
        if(a<126){return 17}
        if(a<133){return 18}
        if(a<140){return 19}
        if(a<147){return 20}
        if(a<154){return 21}
        if(a<161){return 22}
        if(a<168){return 23}
        if(a<175){return 24}
        if(a<182){return 25}
        if(a<189){return 26}
        if(a<196){return 27}
        if(a<203){return 28}
    }
    if(b==8){
        if(a<16){return 1}
        if(a<24){return 2}
        if(a<32){return 3}
        if(a<40){return 4}
        if(a<48){return 5}
        if(a<56){return 6}
        if(a<64){return 7}
        if(a<72){return 8}
        if(a<80){return 9}
        if(a<88){return 10}
        if(a<96){return 11}
        if(a<104){return 12}
        if(a<112){return 13}
        if(a<120){return 14}
        if(a<128){return 15}
        if(a<136){return 16}
        if(a<144){return 17}
        if(a<152){return 18}
        if(a<160){return 19}
        if(a<168){return 20}
        if(a<176){return 21}
        if(a<184){return 22}
        if(a<192){return 23}
        if(a<200){return 24}
        if(a<208){return 25}
    }
    if(b==9){
        if(a<18){return 1}
        if(a<27){return 2}
        if(a<36){return 3}
        if(a<45){return 4}
        if(a<54){return 5}
        if(a<63){return 6}
        if(a<72){return 7}
        if(a<81){return 8}
        if(a<90){return 9}
        if(a<99){return 10}
        if(a<108){return 11}
        if(a<117){return 12}
        if(a<126){return 13}
        if(a<135){return 14}
        if(a<144){return 15}
        if(a<153){return 16}
        if(a<162){return 17}
        if(a<171){return 18}
        if(a<180){return 19}
        if(a<189){return 20}
        if(a<198){return 21}
        if(a<207){return 22}
    }
    if(b==10){
        if(a<20){return 1}
        if(a<30){return 2}
        if(a<40){return 3}
        if(a<50){return 4}
        if(a<60){return 5}
        if(a<70){return 6}
        if(a<80){return 7}
        if(a<90){return 8}
        if(a<100){return 9}
        if(a<110){return 10}
        if(a<120){return 11}
        if(a<130){return 12}
        if(a<140){return 13}
        if(a<150){return 14}
        if(a<160){return 15}
        if(a<170){return 16}
        if(a<180){return 17}
        if(a<190){return 18}
        if(a<200){return 19}
        if(a<210){return 20}
    }
    if(b==11){
        if(a<22){return 1}
        if(a<33){return 2}
        if(a<44){return 3}
        if(a<55){return 4}
        if(a<66){return 5}
        if(a<77){return 6}
        if(a<88){return 7}
        if(a<99){return 8}
        if(a<110){return 9}
        if(a<121){return 10}
        if(a<132){return 11}
        if(a<143){return 12}
        if(a<154){return 13}
        if(a<165){return 14}
        if(a<176){return 15}
        if(a<187){return 16}
        if(a<198){return 17}
        if(a<209){return 18}
    }
    if(b==12){
        if(a<24){return 1}
        if(a<36){return 2}
        if(a<48){return 3}
        if(a<60){return 4}
        if(a<72){return 5}
        if(a<84){return 6}
        if(a<96){return 7}
        if(a<108){return 8}
        if(a<120){return 9}
        if(a<132){return 10}
        if(a<144){return 11}
        if(a<156){return 12}
        if(a<168){return 13}
        if(a<180){return 14}
        if(a<192){return 15}
        if(a<204){return 16}
    }
    if(b==13){
        if(a<26){return 1}
        if(a<39){return 2}
        if(a<52){return 3}
        if(a<65){return 4}
        if(a<78){return 5}
        if(a<91){return 6}
        if(a<104){return 7}
        if(a<117){return 8}
        if(a<130){return 9}
        if(a<143){return 10}
        if(a<156){return 11}
        if(a<169){return 12}
        if(a<182){return 13}
        if(a<195){return 14}
        if(a<208){return 15}
    }
    if(b==14){
        if(a<28){return 1}
        if(a<42){return 2}
        if(a<56){return 3}
        if(a<70){return 4}
        if(a<84){return 5}
        if(a<98){return 6}
        if(a<112){return 7}
        if(a<126){return 8}
        if(a<140){return 9}
        if(a<154){return 10}
        if(a<168){return 11}
        if(a<182){return 12}
        if(a<196){return 13}
        if(a<210){return 14}
    }
    if(b==15){
        if(a<30){return 1}
        if(a<45){return 2}
        if(a<60){return 3}
        if(a<75){return 4}
        if(a<90){return 5}
        if(a<105){return 6}
        if(a<120){return 7}
        if(a<135){return 8}
        if(a<150){return 9}
        if(a<165){return 10}
        if(a<180){return 11}
        if(a<195){return 12}
        if(a<210){return 13}
    }
    if(b==16){
        if(a<32){return 1}
        if(a<48){return 2}
        if(a<64){return 3}
        if(a<80){return 4}
        if(a<96){return 5}
        if(a<112){return 6}
        if(a<128){return 7}
        if(a<144){return 8}
        if(a<160){return 9}
        if(a<176){return 10}
        if(a<192){return 11}
        if(a<208){return 12}
    }
    if(b==17){
        if(a<34){return 1}
        if(a<51){return 2}
        if(a<68){return 3}
        if(a<85){return 4}
        if(a<102){return 5}
        if(a<119){return 6}
        if(a<136){return 7}
        if(a<153){return 8}
        if(a<170){return 9}
        if(a<187){return 10}
        if(a<204){return 11}
    }
    if(b==18){
        if(a<36){return 1}
        if(a<54){return 2}
        if(a<72){return 3}
        if(a<90){return 4}
        if(a<108){return 5}
        if(a<126){return 6}
        if(a<144){return 7}
        if(a<162){return 8}
        if(a<180){return 9}
        if(a<198){return 10}
        if(a<216){return 11}
    }
    if(b==19){
        if(a<38){return 1}
        if(a<57){return 2}
        if(a<76){return 3}
        if(a<95){return 4}
        if(a<114){return 5}
        if(a<133){return 6}
        if(a<152){return 7}
        if(a<171){return 8}
        if(a<190){return 9}
        if(a<209){return 10}
    }
    if(b==20){
        if(a<40){return 1}
        if(a<60){return 2}
        if(a<80){return 3}
        if(a<100){return 4}
        if(a<120){return 5}
        if(a<140){return 6}
        if(a<160){return 7}
        if(a<180){return 8}
        if(a<200){return 9}
        if(a<220){return 10}
    }
    if(b==21){
        if(a<42){return 1}
        if(a<63){return 2}
        if(a<84){return 3}
        if(a<105){return 4}
        if(a<126){return 5}
        if(a<147){return 6}
        if(a<168){return 7}
        if(a<189){return 8}
        if(a<210){return 9}
    }
    if(b==22){
        if(a<44){return 1}
        if(a<66){return 2}
        if(a<88){return 3}
        if(a<110){return 4}
        if(a<132){return 5}
        if(a<154){return 6}
        if(a<176){return 7}
        if(a<198){return 8}
        if(a<220){return 9}
    }
    if(b==23){
        if(a<46){return 1}
        if(a<69){return 2}
        if(a<92){return 3}
        if(a<115){return 4}
        if(a<138){return 5}
        if(a<161){return 6}
        if(a<184){return 7}
        if(a<207){return 8}
    }
    if(b==24){
        if(a<48){return 1}
        if(a<72){return 2}
        if(a<96){return 3}
        if(a<120){return 4}
        if(a<144){return 5}
        if(a<168){return 6}
        if(a<192){return 7}
        if(a<216){return 8}
    }
    if(b==25){
        if(a<50){return 1}
        if(a<75){return 2}
        if(a<100){return 3}
        if(a<125){return 4}
        if(a<150){return 5}
        if(a<175){return 6}
        if(a<200){return 7}
        if(a<225){return 8}
    }
    if(b==26){
        if(a<52){return 1}
        if(a<78){return 2}
        if(a<104){return 3}
        if(a<130){return 4}
        if(a<156){return 5}
        if(a<182){return 6}
        if(a<208){return 7}
    }
    if(b==27){
        if(a<54){return 1}
        if(a<81){return 2}
        if(a<108){return 3}
        if(a<135){return 4}
        if(a<162){return 5}
        if(a<189){return 6}
        if(a<216){return 7}
    }
    if(b==28){
        if(a<56){return 1}
        if(a<84){return 2}
        if(a<112){return 3}
        if(a<140){return 4}
        if(a<168){return 5}
        if(a<196){return 6}
        if(a<224){return 7}
    }
    if(b==29){
        if(a<58){return 1}
        if(a<87){return 2}
        if(a<116){return 3}
        if(a<145){return 4}
        if(a<174){return 5}
        if(a<203){return 6}
    }
    if(b==30){
        if(a<60){return 1}
        if(a<90){return 2}
        if(a<120){return 3}
        if(a<150){return 4}
        if(a<180){return 5}
        if(a<210){return 6}
    }
    if(b==31){
        if(a<62){return 1}
        if(a<93){return 2}
        if(a<124){return 3}
        if(a<155){return 4}
        if(a<186){return 5}
        if(a<217){return 6}
    }
    if(b==32){
        if(a<64){return 1}
        if(a<96){return 2}
        if(a<128){return 3}
        if(a<160){return 4}
        if(a<192){return 5}
        if(a<224){return 6}
    }
    if(b==33){
        if(a<66){return 1}
        if(a<99){return 2}
        if(a<132){return 3}
        if(a<165){return 4}
        if(a<198){return 5}
        if(a<231){return 6}
    }
    if(b==34){
        if(a<68){return 1}
        if(a<102){return 2}
        if(a<136){return 3}
        if(a<170){return 4}
        if(a<204){return 5}
    }
    if(b==35){
        if(a<70){return 1}
        if(a<105){return 2}
        if(a<140){return 3}
        if(a<175){return 4}
        if(a<210){return 5}
    }
    if(b==36){
        if(a<72){return 1}
        if(a<108){return 2}
        if(a<144){return 3}
        if(a<180){return 4}
        if(a<216){return 5}
    }
    if(b==37){
        if(a<74){return 1}
        if(a<111){return 2}
        if(a<148){return 3}
        if(a<185){return 4}
        if(a<222){return 5}
    }
    if(b==38){
        if(a<76){return 1}
        if(a<114){return 2}
        if(a<152){return 3}
        if(a<190){return 4}
        if(a<228){return 5}
    }
    if(b==39){
        if(a<78){return 1}
        if(a<117){return 2}
        if(a<156){return 3}
        if(a<195){return 4}
        if(a<234){return 5}
    }
    if(b==40){
        if(a<80){return 1}
        if(a<120){return 2}
        if(a<160){return 3}
        if(a<200){return 4}
        if(a<240){return 5}
    }
    if(b==41){
        if(a<82){return 1}
        if(a<123){return 2}
        if(a<164){return 3}
        if(a<205){return 4}
    }
    if(b==42){
        if(a<84){return 1}
        if(a<126){return 2}
        if(a<168){return 3}
        if(a<210){return 4}
    }
    if(b==43){
        if(a<86){return 1}
        if(a<129){return 2}
        if(a<172){return 3}
        if(a<215){return 4}
    }
    if(b==44){
        if(a<88){return 1}
        if(a<132){return 2}
        if(a<176){return 3}
        if(a<220){return 4}
    }
    if(b==45){
        if(a<90){return 1}
        if(a<135){return 2}
        if(a<180){return 3}
        if(a<225){return 4}
    }
    if(b==46){
        if(a<92){return 1}
        if(a<138){return 2}
        if(a<184){return 3}
        if(a<230){return 4}
    }
    if(b==47){
        if(a<94){return 1}
        if(a<141){return 2}
        if(a<188){return 3}
        if(a<235){return 4}
    }
    if(b==48){
        if(a<96){return 1}
        if(a<144){return 2}
        if(a<192){return 3}
        if(a<240){return 4}
    }
    if(b==49){
        if(a<98){return 1}
        if(a<147){return 2}
        if(a<196){return 3}
        if(a<245){return 4}
    }
    if(b==50){
        if(a<100){return 1}
        if(a<150){return 2}
        if(a<200){return 3}
        if(a<250){return 4}
    }
    if(b==51){
        if(a<102){return 1}
        if(a<153){return 2}
        if(a<204){return 3}
    }
    if(b==52){
        if(a<104){return 1}
        if(a<156){return 2}
        if(a<208){return 3}
    }
    if(b==53){
        if(a<106){return 1}
        if(a<159){return 2}
        if(a<212){return 3}
    }
    if(b==54){
        if(a<108){return 1}
        if(a<162){return 2}
        if(a<216){return 3}
    }
    if(b==55){
        if(a<110){return 1}
        if(a<165){return 2}
        if(a<220){return 3}
    }
    if(b==56){
        if(a<112){return 1}
        if(a<168){return 2}
        if(a<224){return 3}
    }
    if(b==57){
        if(a<114){return 1}
        if(a<171){return 2}
        if(a<228){return 3}
    }
    if(b==58){
        if(a<116){return 1}
        if(a<174){return 2}
        if(a<232){return 3}
    }
    if(b==59){
        if(a<118){return 1}
        if(a<177){return 2}
        if(a<236){return 3}
    }
    if(b==60){
        if(a<120){return 1}
        if(a<180){return 2}
        if(a<240){return 3}
    }
    if(b==61){
        if(a<122){return 1}
        if(a<183){return 2}
        if(a<244){return 3}
    }
    if(b==62){
        if(a<124){return 1}
        if(a<186){return 2}
        if(a<248){return 3}
    }
    if(b==63){
        if(a<126){return 1}
        if(a<189){return 2}
        if(a<252){return 3}
    }
    if(b==64){
        if(a<128){return 1}
        if(a<192){return 2}
        if(a<256){return 3}
    }
    if(b==65){
        if(a<130){return 1}
        if(a<195){return 2}
        if(a<260){return 3}
    }
    if(b==66){
        if(a<132){return 1}
        if(a<198){return 2}
        if(a<264){return 3}
    }
    if(b==67){
        if(a<134){return 1}
        if(a<201){return 2}
    }
    if(b==68){
        if(a<136){return 1}
        if(a<204){return 2}
    }
    if(b==69){
        if(a<138){return 1}
        if(a<207){return 2}
    }
    if(b==70){
        if(a<140){return 1}
        if(a<210){return 2}
    }
    if(b==71){
        if(a<142){return 1}
        if(a<213){return 2}
    }
    if(b==72){
        if(a<144){return 1}
        if(a<216){return 2}
    }
    if(b==73){
        if(a<146){return 1}
        if(a<219){return 2}
    }
    if(b==74){
        if(a<148){return 1}
        if(a<222){return 2}
    }
    if(b==75){
        if(a<150){return 1}
        if(a<225){return 2}
    }
    if(b==76){
        if(a<152){return 1}
        if(a<228){return 2}
    }
    if(b==77){
        if(a<154){return 1}
        if(a<231){return 2}
    }
    if(b==78){
        if(a<156){return 1}
        if(a<234){return 2}
    }
    if(b==79){
        if(a<158){return 1}
        if(a<237){return 2}
    }
    if(b==80){
        if(a<160){return 1}
        if(a<240){return 2}
    }
    if(b==81){
        if(a<162){return 1}
        if(a<243){return 2}
    }
    if(b==82){
        if(a<164){return 1}
        if(a<246){return 2}
    }
    if(b==83){
        if(a<166){return 1}
        if(a<249){return 2}
    }
    if(b==84){
        if(a<168){return 1}
        if(a<252){return 2}
    }
    if(b==85){
        if(a<170){return 1}
        if(a<255){return 2}
    }
    if(b==86){
        if(a<172){return 1}
        if(a<258){return 2}
    }
    if(b==87){
        if(a<174){return 1}
        if(a<261){return 2}
    }
    if(b==88){
        if(a<176){return 1}
        if(a<264){return 2}
    }
    if(b==89){
        if(a<178){return 1}
        if(a<267){return 2}
    }
    if(b==90){
        if(a<180){return 1}
        if(a<270){return 2}
    }
    if(b==91){
        if(a<182){return 1}
        if(a<273){return 2}
    }
    if(b==92){
        if(a<184){return 1}
        if(a<276){return 2}
    }
    if(b==93){
        if(a<186){return 1}
        if(a<279){return 2}
    }
    if(b==94){
        if(a<188){return 1}
        if(a<282){return 2}
    }
    if(b==95){
        if(a<190){return 1}
        if(a<285){return 2}
    }
    if(b==96){
        if(a<192){return 1}
        if(a<288){return 2}
    }
    if(b==97){
        if(a<194){return 1}
        if(a<291){return 2}
    }
    if(b==98){
        if(a<196){return 1}
        if(a<294){return 2}
    }
    if(b==99){
        if(a<198){return 1}
        if(a<297){return 2}
    }
    if(b==100){
        if(a<200){return 1}
        if(a<300){return 2}
    }
    if(b<=200 && a<=200){
        return 1
    }
    var result=0
    var counter=b
    for(;a>=counter;counter=add(counter,b)){
        result=add(result,1)
    }
    return result
}

+1 Công việc tốt. Không nghĩ về cách này.
Julian Kuhn

Câu trả lời của bạn giống với câu trả lời của Ốc cơ khí đối với phép chia theo 3 bài toán.
Joe Z.

1
Ok, bây giờ chúng ta có một cà vạt. Ai thắng? @JoeZ. Bạn nên chấp nhận câu trả lời với các bổ sung tối thiểu.
Julian Kuhn

4
Câu hỏi của tôi không giới hạn đầu vào từ a1 đến 200, nó chỉ nói rằng nó sẽ đánh giá điểm dựa trên tổng số bổ sung từ phạm vi đầu vào đó. Nó vẫn phải hoạt động cho các số nguyên trên 200.
Joe Z.

1
Ví dụ, phiên bản hiện tại của câu trả lời làm điều đó.
Joe Z.

6

Tcl, 0 bổ sung

proc divide {a b} {
    set sa [string repeat . $a]
    set sb [string repeat . $b]
    set sr ""
    while 1 {
        append sc $sb
        if {[string le $sc]>[string le $sa]} break
        append sr .
    }
    return [string le $sr]
}

Tại sao không sử dụng chuỗi?


Được rồi, cho tôi một chút thời gian để xem lại câu hỏi.
Joe Z.

Này, quá nhiều sơ hở.
Julian Kuhn

Điều này là khá thông minh, thực sự.
Joe Z.

Điều này có vẻ tốt với tôi. Appendgiống như bổ sung, nhưng nó không hoàn toàn giống nhau. Tôi Joinedliệt kê, sử dụng một logic tương tự dựa trên nàng tiên.
DavidC

3

Bổ sung Haskell 0, 29 byte

n/m=[i|i<-[0..],_<-[1..m]]!!n

điều này xác định lại toán tử chia ( /). nó hoạt động bằng cách lập danh sách 0đến vô cùng trong đó mỗi mục được lặp lại nhiều mlần, sau đó chọn phần tử thứ n của danh sách (sử dụng chỉ mục dựa trên 0).


1
Này, bạn có thể thêm một mô tả về những gì mã này không?
Beta Decay

nếu đây là môn đánh gôn, bạn chắc chắn đã thắng ..
tự hào

Những gì về việc sử dụng ([0..]>>=replicate m)!!n. nó gần giống nhau
tự hào

2

Sử dụng triển khai này trong java, 199206 bổ sung

public int divide(int a, int b){
    int counter = 0;
    int c = 0;
    if(b==1){
        return a;
    }
    if(a==b){
        return 1;
    }
    else{
        boolean done = false;
        while(!done){
            c = add(c, b);
            if(a<c){
                done = true;
            }
            counter = add(counter,1);
        }
        return counter;

    }
}

Sau đây là các chức năng trợ giúp

public static void main(String[] args) {
    Main main = new Main();

    for(int a = 1; a<=200; a++){    
        for(int b=1;b<=a;b++){
            main.divide(a, b);
        }
    }

    System.out.println("Number of additions: "+numberOfAdds);
}

public int add(int a, int b){
    numberOfAdds++;
    return (a+b);
}

vâng, cảm ơn vì đã chỉ ra, sửa nó trong câu trả lời
Anurag

2

Python - 0 bổ sung

from itertools import repeat, count

def divide(a, b):
    i = repeat(0, a)
    try:
        for j in count():
            for k in repeat(0, b):
                next(i)
    except:
        return j

Cái này sử dụng một iterator có chiều dài avà tiêu thụ nó theo nhóm bcho đến khi StopIterationđược nâng lên. Tại thời điểm jnày chứa kết quả.


2

Giải pháp của tôi là mã C / C ++ và nó thực hiện nhiều bổ sung (200402), nhưng dù sao thì ...

#include <iostream>

int total = 0;

int sum(int a, int b)
{
    ++total;
    return a + b;
}

int divide(int a, int b)
{
    int x = 1;
    if (a < b)
        return 0;
    else
        return sum(x, divide(sum(a, -b), b));
}

int main()
{
    for (int i = 1; i <= 200; ++i)
        for (int j = 1; j <= 200; ++j)
        {
            if (divide(i, j) != (i / j))
                std::cout << "Failure: a=" << i << " b=" << j << "\n";
        }

    std::cout << "Total additions: " << total << std::endl;
    system("pause");
}

Và đầu ra là:

Total additions: 200402
Press any key to continue . . .

1

Python, 320703 bổ sung

def divide(a, b):
    quotient = 0
    c = 0
    d = 0
    while add(d, b) <= a:
        c = add(c, 1)
        d = add(d, b)
    return c

Như mọi khi, một câu trả lời tham khảo cuối cùng. Điều này chỉ đơn giản là thêm 1vào một "thương số" và bmột biến "remultiplication" cho đến khi nó chạm a.

Đây là mã gỡ lỗi:

add_used = 0

def add(a, b):
    global add_used
    add_used += 1
    return a + b

for a in range(1, 201):
    for b in range(1, a+1):
        print "%d / %d = %d" % (a, b, divide(a, b))

print "Additions used:", add_used

1

Tcl, 0 bổ sung.

Chà, tôi đã phải tìm một cách không sử dụng các cấu trúc dữ liệu khác nhưng vẫn không phải là điều bạn muốn:

# coroutine counter.
proc ccnt {} {yield [info level]; ccnt}
# add implementation without add.
proc cadd {a b} {
    set last 2
    coroutine cadda ccnt
    coroutine caddb ccnt
    while {[cadda]<=$a} {}
    while {[caddb]<=$b} {set last [cadda]}
    rename cadda {}
    rename caddb {}
    return $last
}

proc divide {a b {c 0}} {
    if {$c == 0} {set c $b} {set c [cadd $b $c]}
    if {$c>$a} {tailcall info level}
    divide $a $b $c
}

Sử dụng kích thước ngăn xếp hiện tại của các chủ đề màu xanh lá cây khác nhau.


Không, điều này là hoàn hảo.
Joe Z.

Có thật không? Tôi nghĩ rằng tôi sẽ viết lại nó một chút bằng cách sử dụng coroutines.
Julian Kuhn

Và một lần nữa: điểm 0
Johannes Kuhn

Chết tiệt D: [Chà, đến mức tôi sẵn sàng đi: <]
Joe Z.

+1 cho bạn cũng vậy, tràn ra ngăn xếp cho các vấn đề tương đối nhỏ xảy ra nằm ngoài khu vực đang được đánh giá thực sự là trên tinh thần của các giải pháp hoàn toàn ****** **!
aaaaaaaaaaaa

1

C ++, 100201

for(int a = 1; a<=200; a++){    
        for(int b=1;b<=a;b++){
    iter1 = iter2 = b; 
cout<<a<<" "<<b<<endl;   

c1 =0;
while(iter1 <= a)
{
    iter1 = iter1 + iter2;
    c1 ++;
    nadd++;
}
cout<<"Quotient : "<<c1;
cout<<" Remainder :"<<a - (iter1 - iter2)<<endl;    
}  
}
cout<<"total of add "<<nadd;

Nếu a < bkết quả phải 0, không phải là một lỗi.
Joe Z.

@JoeZ. ok cảm ơn, bây giờ có ổn không
pj

breaknên continue.
Joe Z.

Tôi nghĩ rằng vòng lặp bên trong sẽ bị phá vỡ, bởi vì một khi <b thì vòng lặp bên trong đang tăng b thì bạn nên làm cho các b khác ... thực sự là dư thừa vì vậy tôi nên xóa câu lệnh đó, <b sẽ không bao giờ xảy ra trong trường hợp này. ..
pj

Oh chờ đã, đừng bận tâm, tôi hiểu ý của bạn. (Tôi đã bị nhầm lẫn bởi thứ tự của các con số.)
Joe Z.

1

Bổ sung Mathicala 100201

Điều này thêm ước số, bvào c(được khởi tạo ở 0) miễn là tổng số hoạt động nhỏ hơn hoặc bằng cổ tức , a. Nó cũng nối thêm giá trị hiện tại của cmột danh sách tmà không thực hiện bất kỳ thao tác số học nào.

Khi Whilevòng lặp kết thúc hàm xuất ra độ dài t, nó sẽ tương ứng chính xác với thương số của phép chia số nguyên. Do đó, số lượng bổ sung cho bất kỳ được đưa ra divide[a,b]sẽ bằng chính xác thương số.

100201 là tổng của các chỉ tiêu trong bảng 200 x 200. Đó là bao nhiêu lần cđược tăng lên bởi b. Không có bổ sung khác được yêu cầu. Chỉ các số nguyên dương được sử dụng.

divide[a_, b_] := Module[{c = 0, t = {}}, While[c <= a, t = Append[t, c]; c += b]; 
Length[Rest@t]]

Hiệu quả hơn là tạo một bảng tra cứu, sau đó mỗi lần tìm kiếm sẽ gần như tức thời.

n = 200;
d[a_, b_] := Module[{c = 0, t = {}}, While[c <= a, t = Append[t, c]; c += b]; 
Length[Rest@t]]
quotients = PadRight[#, n] & /@ Table[d[i, j], {i, 1, n}, {j, 1, i}];
divide[a_, b_] := quotients[[a, b]]

Sử dụng

divide[97, 13]

7


1
Vì vậy, nhiều hay ít giải pháp dựa trên chuỗi của tôi? Ohh, và bạn có thể giải thích n++điều này? Hình như là bổ sung cho tôi.
Julian Kuhn

1
Vâng, chức năng kế tiếp được tính là bổ sung, mà không được phép.
Joe Z.

@Johannes Kuhn. Tôi loại bỏ n++, đó là hoàn toàn không cần thiết. Từ những gì tôi có thể nói, (tôi không biết TCL), giải pháp của tôi giống như của bạn, nhưng lưu trữ các yếu tố lại với nhau trong nhiều bộ thay vì theo chuỗi.
DavidC

1
Thế còn no other data constructs besides numbers?
ugoren

@Ugoren Bạn có nghĩ rằng một hệ thống một số cơ sở đủ điều kiện là về số? Vấn đề có thể tranh cãi, tôi nghĩ, là việc tham gia có cấu thành thêm hay không.
DavidC

1

Ngoài ra - 0

divide<-function(a,b){
    options(warn=-1)
    A<-matrix(1:b,nrow=a,ncol=1)
    length(split(A,A)[[b]])
    }

Sử dụng tái chế vector R.
Dòng thứ hai tạo ra một ma trận có chiều dài được atạo bởi một vectơ có chiều dài bđược tái chế cho đến khi đạt được chiều dài a.
Dòng thứ ba phân chia ma trận theo giá trị của nó và trả về độ dài của phần tử cuối cùng (do đó là kết quả của phép chia số nguyên atheo b).
Việc tạo một ma trận với một vectơ có độ dài không phải là bội số của độ dài của ma trận sẽ đưa ra cảnh báo nhưng nếu chúng ta chặn cảnh báo trước (dòng 1) thì nó hoạt động.

Để đưa ra một ví dụ cụ thể nếu chúng ta chia 5 cho 3, Asẽ là một vectơ chứa 1 2 3 1 2 (tức là 1 2 3 được tái chế theo chiều dài 5). Kết quả của hoạt động chia tách sẽ là một danh sách với phần tử đầu tiên chứa 1 1, 2 2 thứ hai và 3 thứ ba (vì chỉ có một 3 trong A). Do đó, kết quả là 1.


Một Matix nghe giống như một cấu trúc dữ liệu khác với một số.
Julian Kuhn

Ah thực sự tôi đã bỏ lỡ phần được chỉ định rằng cấu trúc dữ liệu duy nhất được phép là số. Lỗi của tôi. Tôi đã trả lời sau khi chỉnh sửa nhưng đọc câu hỏi trước :)
plannapus

1

Trong Ruby,

def divide(a,b)
  n, d = 'x' * a, 'x' * b
  l = []
  (l << 'x'; d << 'x' * b) while n.size >= d.size
  l.size
end  

Tôi không biết TCL, nhưng tôi nghi ngờ đây là cách tiếp cận tương tự như câu trả lời (đầu tiên) của @Johannes.


* Và << làm gì? Tôi không quen thuộc với Ruby.
Joe Z.

@Joe: d = 'x' * 5=> "xxxxx". a << bnối chuỗi bvào chuỗi a. Ở đây, d = "xxx"d << 'x'kết quả trong d = "xxxx".
Cary Swoveland

1

Java: 92 987 bổ sung

Tôi sử dụng đệ quy nhị phân, đó a/b == 2 * a/(2b) + maybe 1. Đối với số chia đó phần còn lại là cần thiết. Thông thường sẽ có phép trừ a% (2b) - b, nhưng điều đó được giải quyết bằng cách giữ phần còn lại là (rem, remNegative). Và 2b = b+btất nhiên.

static int add_used;

static int add(int a, int b) {
    if (a == 0)
        return b;
    if (b == 0)
        return a;
    ++add_used;
    return a + b;
}

private static class DivRem {
    int div;
    int rem;
    int remNegative;

    DivRem(int div, int rem) {
        this.div = div;
        this.rem = rem;
    }
}

public static int divide(int a, int b) {
    add_used = 0;
    return divrem(a, b).div;
}

public static DivRem divrem(int a, int b) {
    if (b > a) {
        return new DivRem(0, a);
    }
    DivRem dr = divrem(a, add(b, b));
    dr.div = add(dr.div, dr.div);
    if (dr.rem >= add(b, dr.remNegative)) {
        dr.div = add(dr.div, 1);
        //dr.rem = add(dr.rem,  -b);
        dr.remNegative = add(dr.remNegative,  b);
    }
    return dr;
}

private static void test(int a, int b) {
    boolean okay = a/b == divide(a, b);
    System.out.printf("%d / %d = %d :: %d : #%d  %s%n", a, b, a/b,
        divide(a, b), add_used, okay);
}

public static void main(String[] args) {
   //test(2352, 324);
   int n = 0;
   for (int a = 1; a <= 200; ++a) {
       for (int b = 1; b <= a; ++b) {
           //test(a, b);
           divide(a, b);
           n += add_used;
       }
   }
   System.out.println("Additions: " + n);
}

Và nó sử dụng bao nhiêu bộ phận?
Doorknob

@Doorknob 92987 (không thấy for-for).
Eggen

Một nhận xét: điều này không tính 0 + x cũng không x + 0: vì vậy ~ 100k bổ sung.
Eggen

0
//a lies between 1 and 200, b lies between 1 and a.

int divide(int a,int b){
int x=a,y=b;
int count=1;
while(y<x){
y+=y;
count++;
}
return count;
}

3
Và có bao nhiêu bổ sung đó?
Julian Kuhn

0

C # - 0 bổ sung

using System.Collections.Generic;
using System.Linq;

static int Divide(int a, int b)
{
    var ints = new List<int>(a);
    while (ints.Count < a)
        ints.AddRange(Enumerable.Range(1, b));

    return ints.Select((x, i) => x == b && i < a).Count(x => x);
}

Dân số một danh sách các số nguyên với số 1..blần lặp lại a. Số lần bxuất hiện (ngoại trừ lần xuất hiện với chỉ mục> a) là kết quả.

Tôi không chắc liệu danh sách này có được các quy tắc cho phép hay không, nhưng tôi đang gửi nó theo tinh thần của các bài đăng khác, những người không thực hiện nghiêm túc các quy tắc đó (xét cho cùng, không sử dụng bổ sung nào về cơ bản là bỏ qua thách thức hoàn toàn).


Vâng, theo "tinh thần" của thử thách đã bị bỏ rơi khá nhiều vào thời điểm này.
Joe Z.

Có 1 giải pháp ngoài kia thực hiện nghiêm túc tất cả các quy tắc và có 0 bổ sung.
Julian Kuhn

@JohannesKuhn: Điều đó gây tranh cãi. Thách thức là làm phân chia bằng cách sử dụng bổ sung. Nếu chúng ta không sử dụng phép cộng, chúng ta sẽ không thực sự thách thức ...
Igby Largeeman

0

Bổ sung C - 85591

Chúng ta đi đây. Tôi nghĩ rằng điều này có thể là tối ưu. Nó sử dụng một kỹ thuật "phân chia ngược", theo đó thông qua phép nhân dài, nó tạo ra số lớn nhất qsao cho q * b <= achỉ sử dụng +<=. Nó rất, rất nhanh.

#include <stdio.h>
#include <assert.h>

// Division function.
q,u,v,z=0;s(a,b){return!a?b:!b?a:(z++,a+b);}
d(a,b,p){if((v=s(b,b))<=a)d(a,v,s(p,p));if((v=s(u,b))<=a)u=v,q=s(p,q);}
divide(a,b){u=q=0;d(a,b,1);return q;}

// Test driver.
main(){for(int a=1;a<=200;a++)for(int b=1;b<=a;b++)assert(divide(a,b)==q);
printf("%d additions\n",z);}

Ghi chú:

  1. s(a,b)trả về tổng a+bvà biến số truy cập zmỗi lần thực hiện phép cộng. Nếu một trong hai ahoặc bbằng 0, việc bổ sung không cần thiết sẽ tránh được.
  2. d(a,b,p)là một hàm đệ quy để xây dựng các phần bên trong để so sánh và bổ sung. Nó sử dụng các biến toàn cục q, uv. Độ sâu đệ quy tối đa là số bit trong avà đệ quy là tuyến tính chứ không phải là cây. (Lưu ý: btrong chức năng này là bản gốc bnhân với công suất là 2.)
  3. divide(a,b) trả lại sàn (a / b) theo yêu cầu.
  4. Biên dịch với các cảnh báo (vì mã được đánh gôn). Chạy tốt

0

J, 0 bổ sung, 14 byte

Lấy cảm hứng từ câu trả lời của Alexei Kopylov .

f=:[{]#i.@>:@[

Không sử dụng toán học nào cả:

f=:                    NB. define function f
             [         NB. take left argument,
          >:@          NB. increment it,
       i.@             NB. generate the list [0..left arg+1)
     ]#                NB. replicate each item in the list by the right argument
                       NB. (so if ]=2, list becomes 0 0 1 1 2 2 3 3 ...)
   [{                  NB. select the ['th item from that list.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.