Em có bài toán cho như thế này mà mới chỉ học mấy cái lệnh đơn giản như for ... to ... do, while ... do, case ... of, if ... then ... esle. Nói chung là toàn các lệnh đơn giản cho người mới học. Có bài toán khó quá các bro giúp em lập trình bằng pascal được không Nhập m là một số nguyên dương từ bàn phím, M>9 a_ Số m có mấy chữ số? Viết M? b_ Xóa đi một chữ số của M để được số Y sao cho Y là số lớn nhất lập được từ các chữ số còn lại của M. c_ Xóa đi một chữ số của M để được số Y sao cho Y là số bé nhất lập được từ các chữ số còn lại của M. Giúp em gấp với :
Cái này thì có gì đâu chứ Tớ ko có thời gian nhưng viết qua để cậu hiểu : 1. Cậu học về xâu chưa ? Học rồi thì khai báo biến xâu rồi xài hàm length là xong 2. Dùng vòng for i:=1 to n do (n là độ dài của xâu) dùng thêm một vòng for j:=i thì phải :'> kiểu như cho 2 vòng chạy sát nhau và so sánh a[j] và a. So sánh đến khi xuất hiện a thỏa mãn điều kiện thì thôi. Ko biết có đúng ko nữa. Tại ko phải dân code nên cũng hơi ngu
Tớ nghĩ dùng hàm length nhanh nhất , khỏi tính toán mà m và M là 1 à ? Nếu là 1 sao còn đoạn "viết M" ???
nếu học về khoa học máy tính thì có lẽ pascal là khởi đầu tốt hơn đấy, vì ngôn ngữ đấy nó trực quan hơn C. Mới lại cấp 3 cũng chỉ học đến pascal thôi, thi học sinh giỏi cũng dùng pascal luôn bài trên kia dùng xâu là chuẩn rồi *mà nhớ ko nhầm là có 1 hàm trong pascal cho đổi luôn giá trị của xâu ra số, hình như là val, rồi cứ thế mà so sánh luôn thôi, ko cần for đâu
Hàm liên quan đến xâu ở pascal về số chỉ có length là hay xài thui mà. Nó cũng so sánh đc như bình thường.
Học C tự nhiên hỏi về pascal làm gì Mà có cái topic hỏi đáp ở trển kìa Viết bằng C đc ko, tôi giúp cho
a/ Cho vòng for, chia số M cho 10 (dùng biến tạm), tăng biến đếm, chừng nào bằng 0 thì dừng. Xuất biến đếm ra màn hình. b/ Cũng cho vòng lặp, chia số M cho 10 để cắt từng số ra, kiểm tra thằng nào nhỏ nhứt trong đám thì vứt đi. c/ Như câu b, nhưng vứt thằng lớn nhứt ra.
Tui ko hiểu rõ ý câu b,c lắm . Co fải là sau khi xóa 1 chữ số thì các chữ số còn lại vẫn theo thứ tự ấy lập thành số lớn (bé) nhất . Nếu vậy thử cách này xem : b) Lập vòng lặp ( for hay while tùy ) tìm chữ số đầu tiên từ bên trái mà nhỏ hơn chữ số liền ngay sau nó . Đó chính là chữ số cần bỏ , còn nếu ko có thì là chữ sô hàng đơn vị . c) Tương tự nhưng là chữ số cuối cùng từ bên trái lớn hơn chứ số liền sau nó . Ko có thì là chữ số hàng đơn vị . Ý tưởng là vậy , code thì tui chỉ xài C thui , pascal quên rùi n tui nghĩ bài này xài xâu tiện hơn .
... Toàn mấy bạn thông minh xuất chúng vào đây nói linh tinh. Cái khó bài này là cái thuật toán, ông nào cũng bay vào khoe hiểu biết nông cạn của mình ra. Chuyển số đó vào 1 chuỗi a[], rồi duyệt. Câu b: boolean check = false; int i; for (i = 1; i < a.length() -1 ; i++) if (a < a[i+1]) {check = true; break;} if (! check) i = i+1; // sau khi đoạn mã trên thực thi, i chính là vị trí số cần tìm. Dùng đoạn code sau để // trả về số tìm đc int j,k,number; k = 0; number = 0; for ( j = a.length() - 1; j>=0 ; j--) { if (i == j) continue; number = number + a[j]*10^k; k++; } //Sau khi chuỗi trên duyệt xong number là số cần tìm. Còn tại sao thuật toán nó ra như vậy thì: 9876564321. Bạn thử nghĩ xem delete số nào trong dãy đó sẽ đc số nhỏ nhất thì sẽ hiểu.