Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อค้นหาจำนวนการดำเนินการเพื่อเพิ่มจำนวนเซลล์ที่มีเลขคู่ในกริดให้มากที่สุด


สมมติว่าเราได้รับตารางขนาด h * w ทุกเซลล์ในกริดมีค่าเฉพาะที่กำหนดให้กับเซลล์นั้น เราต้องขยายเซลล์ให้มีค่าที่เท่ากัน ในการดำเนินการดังกล่าว เราสามารถเลือกเซลล์ที่ยังไม่เคยเลือกมาก่อนได้ จากนั้นจึงลดค่าลง 1 เซลล์ปัจจุบันและเพิ่มค่าขึ้น 1 เซลล์ที่อยู่ติดกับเซลล์ปัจจุบันในแนวตั้งหรือแนวนอน เราพิมพ์จำนวนการดำเนินการและหมายเลขเซลล์ของการดำเนินการเพิ่มและลด ผลลัพธ์จะอยู่ในรูปแบบด้านล่าง -

  • จำนวนการดำเนินการ

  • ที่ 1 (ตำแหน่งเซลล์ลดลง) - (ตำแหน่งเซลล์เพิ่มขึ้น)

    ....

  • nth (ตำแหน่งเซลล์ลดลง) - (ตำแหน่งเซลล์เพิ่มขึ้น)

ดังนั้น หากอินพุตเป็น h =3, w =3, grid ={{2, 3, 4}, {2, 0, 1}, {1, 2, 3}} ผลลัพธ์จะเป็น

4(0, 1) - (0, 2)(2, 0) - (2, 1)(2, 1) - (2, 2)(0, 2) - (1, 2) 

ขั้นตอน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

กำหนดผลลัพธ์อาร์เรย์ใหม่ที่มี tuplefor initialize i :=0 when i 
 0 แล้ว:แทรก tuple(i, j - 1, i, j) ที่ส่วนท้ายของผลลัพธ์ grid[i, j] :=grid[i, j] + tp ถ้า grid[i, j] mod 2 เหมือนกับ 1 และ j 
 0 จากนั้น:แทรก tuple(i - 1, w - 1, i, w - 1) ที่ส่วนท้ายของ resultgrid [i, w - 1] :=grid[i, w - 1] + tpif grid[i, w - 1] mod 2 เหมือนกับ 1 แล้ว:grid[i, w - 1] :=grid[i, w - 1] - 1tp :=1Otherwisetp :=0print(size of result) for initialize i :=0 when i  

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include ใช้เนมสเปซ std;void แก้ปัญหา(int h, int w, vector>grid){ vector> ผลลัพธ์; สำหรับ(int i =0; i 
 0){ result.push_back(make_tuple(i, j-1, i, j)); ตาราง[i][j] +=tp; } if(grid[i][j]%2 ==1 &&j 
 0){ result.push_back(make_tuple(i-1, w-1, i, w-1)); ตาราง[i][w-1] +=tp; } if(grid[i][w-1]%2 ==1){ grid[i][w-1] -=1; tp =1; } อื่น ๆ tp =0; } cout <<(int)result.size() <(result[i]) <<", " < (ผลลัพธ์[i]) <<")" <<" - (" <<รับ<2>(ผลลัพธ์[i]) <<", " <<รับ<3>(ผลลัพธ์[i]) <<") "; ศาล <<'\ n'; }}int main() { int ชั่วโมง =3, w =3; เวกเตอร์<เวกเตอร์> กริด ={{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}; แก้(h, w, กริด); คืนค่า 0;}

อินพุต

3, 3, {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}

ผลลัพธ์

4(0, 1) - (0, 2)(2, 0) - (2, 1)(2, 1) - (2, 2)(0, 2) - (1, 2)