4 số nguyên mà sao nhập có 3 thế ?
#include <stdio.h>
int main()
{
int a,b,c,d;
int max, min, min1, e;
scanf("%d%d%d%d",&a,&b,&c,&d);
min=a<b?a:b;
min=min<c?min:c;
printf("%d\n",min);
max=a>b?a:b;
max=max>c?max:c;
printf("%d", max);
}
Có ai giúp em với không viết theo dạng Toán Tử 3 Ngôi... hoặc viết theo if else'
ở dây e đã viết cái lớn nhất và bé nhất rồi còn 2 cái ở giữa
Đã được chỉnh sửa lần cuối bởi mtsunwin : 05-12-2014 lúc 12:41 PM.
4 số nguyên mà sao nhập có 3 thế ?
The problem is not the problem. the problem is your attitude about the problem
à làm 4 số khó quá đổi qua 3 số ><
/*
* Nếu số hạng thứ nhất 'a' lớn hơn số hạng thứ hai 'b'
* Thì sao lưu giá trị của 'a' cho 1 biến tạm 'e'
* Gán giá trị của 'b' cho 'a'
* Gán giá trị của 'e' cho 'b'
*/
/*
* Nếu số hạng thứ hai 'b' lớn hơn số hạng thứ ba 'c'
* Thì sao lưu giá trị của 'b' cho 1 biến tạm 'e'
* Gán giá trị của 'c' cho 'b'
* Gán giá trị của 'e' cho 'c'
*/
.................................................. ....
Stay hungry. Stay foolish.
Design is not just what it looks like and feels like. Design is how it works.
int main()
{
int a,b,c,e;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
e=a;
a=b;
b=e;
}
if(b>c)
{
e=b;
b=c;
c=e;
}
printf("%d%d%d",a,b,c);
}
làm theo bạn và nhập kết quả là 7 8 1 nó ra sai ?
- - - Nội dung đã được cập nhật ngày 05-12-2014 lúc 02:05 PM - - -
ok bạn mình làm được rồi
#include <stdio.h>
int main()
{
int a,b,c,e;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
e=a;
a=b;
b=e;
}
if(b>c)
{
e=b;
b=c;
c=e;
}
if(a>b)
{
e=a;
a=b;
b=e;
}
printf("%d%d%d",a,b,c);
}
Mình viết dấu nhiều chấm có nghĩa là ở phía dưới nó vẫn còn và làm tương tự như vậy.
Bạn phải linh động chứ, áp dụng cho 'c' và 'd' nữa.
Tóm lại, nếu là 4 số thì có 5 biến, sắp xếp mặc định theo chiều tăng dần là 'a', 'b', 'c', 'd'
Stay hungry. Stay foolish.
Design is not just what it looks like and feels like. Design is how it works.
3 số, còn 4 số mà dùng if thì hơi mệt... :v :vCode:main(){ int a,b,c; int min, max, mid; printf("Nhap a, b, c: "); scanf("%d%d%d", &a, &b, &c); min=(a>b)?((b>c)?c:b):((a>c)?c:a); max=(a>b)?((a<c)?c:a):((b<c)?c:b); mid=(a>b)?((b>c)?b:((a>c)?c:a)):((a>c)?a:((b>c)?c:b)); printf("%d %d %d",min,mid,max); getch(); }
The problem is not the problem. the problem is your attitude about the problem
Cải tiến lại bài của tdraucuda
C Code:
min = a < b ? (a < c ? a : c) : (b < c ? b : c); max = a > b ? (a > c ? a : c) : (b > c ? b : c); mid = a + b + c - min - max;
YH : lobuocphuudu_218
Phone : 0126 463 5095
4 số thì dễ mà, 5 so sánh là đủ: giả sử cho x y z w
so sánh x và y, được a1 và b1 với a1 < b1
so sánh z với a1, so sánh z với b1, được a2 < b2 < c2
so sánh w với b2 rồi tùy kết quả mà so sánh w với a2 hoặc w với c2, được a3 < b3 < c3 < d3
if x < y: a1, b1 = x, y
else: a1, b1 = y, x
if z < a1: a2, b2, c2 = z, a1, b1
else if z < a2: a2, b2, c2 = a1, z, b1
else: a2, b2, c2 = a1, b1, z
if w < b2:
if w < a2: a3, b3, c3, d3 = w, a2, b2, c2
else: a3, b3, c3, d3 = a2, w, b2, c2
else if w < c2: a3, b3, c3, d3 = a2, b2, w, c2
else: a3, b3, c3, d3 = a2, b2, c2, w
4 số thì có 4! = 24 thứ tự x y z w. Mỗi lần so sánh giảm được 2 lần: lần so sánh thứ nhất còn 12 cách, lần ss thứ 2 còn 6 cách, ss thứ 3 còn 3 cách, ss thứ 4 còn tối đa 2 cách, ss thứ 5 thì chỉ còn 1 cách chọn x y z w => mininum là 5 so sánh.
5 số khó hơn nhiều. 5! = 120, 27 = 128. Chỉ trong 7 lần so sánh có thể sắp xếp 5 số a b c d e không?
3 số thì 3! = 6, 23 = 8, 3 lần so sánh: so sánh lấy a < b: 1 bước ss, được a1 b1 với a1 < b1, c sẽ vào 1 trong 3 chỗ trống: . a1 . b1 . => 2 lần so sánh nữa là biết vị trí của c. Dễ.
4 số cũng dễ vì áp dụng cách này cũng được: cho x, y, z, w, xài sắp xếp 3 số, tốn 3 lần so sánh, được a1 < b1 < c1. Số thứ 4, w, sẽ được điền vào 1 trong 4 chỗ trống: . a1 . b1 . c1 . , mà 4 chỗ thì chỉ cần 2 lần so sánh nữa, vậy tổng cộng là 3 + 2 = 5 lần so sánh, vừa đạt mức tối thiểu luôn => dễ.
5 số thì khó, vì nếu xài sắp xếp 4 số thì đã tốn 5 lần so sánh, được a1 < b1 < c1 < d1. Số thứ 5, e, sẽ được điền vào 1 trong 5 chỗ trống . a1 . b1 . c1 . d1 . , mà 5 chỗ thì cần tới 3 lần so sánh mới chọn được chỗ chính xác => 5 + 3 = 8 lần so sánh. Trong khi trên lý thuyết chỉ cần 7 lần so sánh. => khó vì ko xài sắp xếp 4 số được.
6 số thì dễ vì chỉ cần sắp xếp 5 số được a1 < b1 < c1 < d1 < e1: 7 lần so sánh. Số thứ 7 vào 1 trong 6 vị trí => 3 lần so sánh nữa, tổng cộng là 10 lần so sánh. Không thể xài 9 lần so sánh vì 29 = 512 < 6! = 720. Vậy 10 lần so sánh là tối thiểu => dễ
v.v...
Đã được chỉnh sửa lần cuối bởi INTP : 05-12-2014 lúc 09:34 PM.
Lão @INTP phân tích kinh vậy???
Nếu giả sử bài toán cho phép sử dụng thêm vòng lặp for, vậy với ý tưởng của tui phía trên với n số (n > 3) thì nó chỉ thực hiện (n -1) lần thôi.
Theo tui hiểu thì việc giới hạn bài tập ở mức 4 con số là không cho phép sử dụng vòng lặp ý.
Thay vì chỉ viết 1 lần, chủ thớt phải viết 3 lần.
Lần 1: So sánh 'a' và 'b'
Lần 2: So sánh 'b' và 'c'
Lần 3: So sánh 'c' và 'd'
Tui nói vậy có hợp lý không lão?
Stay hungry. Stay foolish.
Design is not just what it looks like and feels like. Design is how it works.