01/10/2018, 00:39

Mong ad xoa gium

Mong ad xoa dum bai a

20 11 98 viết 02:45 ngày 01/10/2018

em có viết được chương trình nhưng khác yêu cầu một chút , em chỉ xuất được số chính giữa lớn nhất thôi ạ , ai giúp e chỉnh lại theo yêu cầu đề bài với ạ , khác output 1 chút .


using namespace std;
int demso(int a,int k);
int main()
{
    int n,a,k=0,gt,tam=0;
    nhaplai:
        cin>>n;
    while (n>=10000 || n<1) goto nhaplai;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        if(demso(a,k)%2!=0) //nhap so le.
    {
        if(demso(a,k)==3)
        {
            gt=((a/10)%10);
        }
        if(demso(a,k)==5)
        {
            gt=((a/100)%10);
        }
        if(demso(a,k)==7)
        {
            gt=((a/1000)%10);
        }
        if(demso(a,k)==9)
        {
            gt=((a/10000)%10);
        }
    }
    else
    {
        if(demso(a,k)==4)
        {
            a=a/10;
            gt=a%100;
        }
        if(demso(a,k)==6)
        {
            a=a/100;
            gt=a%100;
        }
        if(demso(a,k)==8)
        {
            a=a/1000;
            gt=a%100;
        }
    }
    if(gt>tam) tam=gt;
    }
    cout<<"so chinh giua lon nhat la : "<<tam;
     return 0;
}
int demso(int a,int k)
{
  while(a>0)
{
            a=a/10;
            k+=1;
}
 return k;
}
Quân viết 02:51 ngày 01/10/2018

Nếu số chữ số là 11 thì tính sao, ngoài ra cuxng không có điều kiện giới hạn số nhận vào, nên có thể là 1 số rất lớn, thuật toán vừa theo kiểu trâu bò mà lại vừa có nhiều lỗ hổng, lặp code cũng rất nhiều

Trần Ngọc Khoa viết 02:40 ngày 01/10/2018

Mình nghĩ chuyển số sang string

  • Nếu độ dài string là chẵn thì lấy hai số ở giữa đem so sánh.
  • Nếu độ dài string là lẻ thì lấy phần tử ở giữa đem so sánh.

string có độ dài lẻ có số ở giữa nhỏ hơn string có độ dài chẵn.

20 11 98 viết 02:44 ngày 01/10/2018

e mới học ạ , a giúp e với :((

Quân viết 02:54 ngày 01/10/2018

Chuẩn, thêm phần valid và padding nữa là được, đâu cần phải chuyển hết sang số đâu

20 11 98 viết 02:39 ngày 01/10/2018

Ai giải thích cho em dòng code này với ạ

#include <cstring>
using namespace std;

char s[10000],x[10000];

int tinh()
{
    int len=strlen(s);
    if (len%2!=0)
        return (s[len/2]-48);
    return (s[len/2 - 1]-48)*10 + (s[len/2]-48);
}

int  main()
{
    int n,i,j,gt=-1;
    cin>>n;
    for (i=1; i<=n; i++)
    {
        cin >> s;
        if (tinh()>=gt)
        {
            gt=tinh();
            for (j=0; j<strlen(s); j++)
                x[j]=s[j];
            x[j]='\0';
        }
    }
    cout << x;
    return 0;
}
Tynk Huynk viết 02:53 ngày 01/10/2018

Hồi nãy nhìn lộn, hàm tinh() đúng rồi đấy

20 11 98 viết 02:44 ngày 01/10/2018

em cũng k hiểu ạ , đây là code e nhặt nhưng nó đúng với 100% đề bài mà e vẫn k hiểu ai có thể giải thích cho em dược không , em cảm ơn

Tynk Huynk viết 02:48 ngày 01/10/2018

Bạn không hiểu chỗ nào ?

20 11 98 viết 02:53 ngày 01/10/2018

hàm tinh() và khúc if(tinh()>=gt) ạ

Tynk Huynk viết 02:42 ngày 01/10/2018

Thật ra input con số của bài này là dạng chuỗi
Hàm tinh() dùng để tìm số chính giữa, nó chia ra 2 trường hợp: độ dài con số là số lẻ hoặc là số chẵn.
— Nếu là số lẻ thì lấy kí tự ở vị trí độ dài chia 2 và chuyển nó thành số [quote=“Duy_Anh_Vu, post:7, topic:37787”]
s[len/2]-48
[/quote]

rồi trả về kết quả đó
— Số chẵn thì tương tự như số lẻ thôi

Còn [quote=“Duy_Anh_Vu, post:7, topic:37787”]
if (tinh()>=gt)
[/quote]

Giả sử mình cho 3 số: 123, 4567, 22145
Đầu tiên s là 123 thì tinh() mang giá trị 2, còn gt = -1 thì thỏa điều kiện if nên gt sẽ được cập nhật giá trị của tinh() -> gt = 2, đồng thời chuỗi x sẽ mang giá trị của s.
-> x = 123

Lần thứ 2, s là 4567 -> tinh() = 56 -> tinh() >= gt = 2 : đúng -> gt = 56 -> x = 4567

Lần cuối cùng, s = 22145 -> tinh() = 1 -> tinh() >= gt = 2 : sai -> không làm gì hết

Sau đó in ra x = 4567

20 11 98 viết 02:42 ngày 01/10/2018

Thanks bro very much

Tynk Huynk viết 02:43 ngày 01/10/2018

Đó là cách walkthrough cho 1 thuật toán. Lần sau nếu bạn cảm thấy không hiểu cách hoạt động của thuật toán thì lấy giấy rồi tự đưa input, rồi dưa theo giải thuật đó mà làm như mình thì sẽ hiểu thôi

Kira viết 02:44 ngày 01/10/2018

Bác ở UIT phải ko

Bài liên quan
0