Chúng ta hãy xem xét, chúng ta sẽ cố gắng viết chữ ‘A’, bằng cách sử dụng bàn phím. Mục tiêu của chúng tôi là chỉ sử dụng bốn phím và cố gắng viết tối đa chữ ‘A’ trên trường văn bản. Các phím là ‘A’, ‘C’, ‘V’ và ‘Ctrl’.
Để viết số A tối đa, chúng ta sẽ sử dụng Ctrl + A để chọn Tất cả, Ctrl + C để sao chép và Ctrl + V để dán.
Đầu vào và Đầu ra
Input: Number of keystrokes, say 7 Output: Maximum Number of A's with 7 keystrokes is: 9 Press A three times. Then Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+V
Thuật toán
keyNumbers(keyStrokes)
Đầu vào: số lần nhấn phím.
Đầu ra: Số lượng chữ cái tối đa khi sử dụng các tổ hợp phím này.
Begin if keyStrokes <= 6, then return keyStrokes for n := 1 to 6, do result[n-1] := n done for n := 7 to keyStrokes, do result[n-1] := 0 for breakpoint := n-3 down to 1, do curr := (n – breakpoint - 1)*result[breakpoint - 1] if curr > result[n-1], then result[n - 1] := curr done done result[keyStrokes - 1] End
Ví dụ
#include<iostream> using namespace std; int keyNumbers(int keystrokes) { //find number of 'A's using 4 types of keys if (keystrokes <= 6) //if keystrokes are less than 7 return keystrokes; int result[keystrokes]; //store intermediate results for (int n=1; n<=6; n++) //upto 6 keystrokes, we need that number of keystrokes for max result[n-1] = n; for (int n=7; n<=keystrokes; n++) { //for 7th to higher result[n-1] = 0; //initially store 0 as result for (int breakPoint=n-3; breakPoint>=1; breakPoint--) { //find breakpoint to select, copy and paste int curr = (n-breakPoint-1)*result[breakPoint-1]; if (curr > result[n-1]) result[n-1] = curr; } } return result[keystrokes-1]; } int main() { int keystrokes; cout << "Enter Number of keystrokes: "; cin >> keystrokes; cout << "Maximum Number of A's with "<<keystrokes << " keystrokes is: "<< keyNumbers(keystrokes)<<endl; }
Đầu ra
Enter Number of keystrokes: 7 Maximum Number of A's with 7 keystrokes is: 9