[Programming] giúp e bài tập c này với |
19/03/2009 12:23:36 (+0700) | #1 | 173761 |
hãy đếm số lượng chữ số lớn nhất của số nguyên dương n
|
|
|
|
|
[Question] Re: giúp e bài tập c này với |
19/03/2009 14:20:26 (+0700) | #2 | 173776 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
Vài gợi ý:
- Duyệt từng chữ số trong số n, bằng cách duyệt từ cuối về đầu, ở mỗi bước chia modulo số n cho 10 để lấy phần dư. Số dư này chính là chữ số sẽ dùng để so sánh
- Lưu giá trị số dư ở trên để so sánh tìm ra giá trị lớn nhất và đếm
- Bước tiếp theo là lấy phần nguyên bằng cách chia divide n cho 10 để lấy phần nguyên
- Lặp lại bước đầu
Tôi gợi ý vậy có khó hiểu ko ta?! |
|
Hibernating |
|
|
|
[Question] Re: giúp e bài tập c này với |
19/03/2009 23:26:38 (+0700) | #3 | 173801 |
|
anglezero
Member
|
0 |
|
|
Joined: 19/03/2009 11:07:24
Messages: 19
Offline
|
|
Z0rr0 wrote:
Vài gợi ý:
- Duyệt từng chữ số trong số n, bằng cách duyệt từ cuối về đầu, ở mỗi bước chia modulo số n cho 10 để lấy phần dư. Số dư này chính là chữ số sẽ dùng để so sánh
- Lưu giá trị số dư ở trên để so sánh tìm ra giá trị lớn nhất và đếm
- Bước tiếp theo là lấy phần nguyên bằng cách chia divide n cho 10 để lấy phần nguyên
- Lặp lại bước đầu
Tôi gợi ý vậy có khó hiểu ko ta?!
#include<stdio.h>
#include<conio.h>
void main(void)
{
int idem=1,n,dv,lc,ktra;
printf("Ban nhap n = ");
scanf("%d",&n);
lc=n%10;
ktra=n;
while(n!=0)
{
dv=n%10;
if(dv>=lc)
lc=dv;
n=n/10;
}
while(ktra!=0)
{
n=n%10;
if(lc==n)
idem++;
ktra=ktra/10;
}
printf("Ket qua %d",idem);
getch();
}
anh ZOroro kiem tra dùm em với
e không biết nó bi sai chỗ nào nữa
chạy mà kết quả nó cứ ra 1
|
|
|
|
|
[Question] Re: giúp e bài tập c này với |
20/03/2009 00:33:16 (+0700) | #4 | 173810 |
|
Z0rr0
Q+WRtaW5pc3RyYXRvc+g
|
Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
|
|
Bạn chú ý đặt lại tiêu đề gần với nội dung câu hỏi.
Đoạn
Code:
Chỉ cần so sánh lớn hơn là đủ.
Vòng lặp thứ 2 có vấn đề nhầm lẫn khi sử dụng biến
Bài toán này có thể gom lại 1 vòng lặp là đủ.
|
|
Hibernating |
|
|
|
[Question] Re: giúp e bài tập c này với |
20/03/2009 11:15:11 (+0700) | #5 | 173882 |
|
anglezero
Member
|
0 |
|
|
Joined: 19/03/2009 11:07:24
Messages: 19
Offline
|
|
Z0rr0 wrote:
Bạn chú ý đặt lại tiêu đề gần với nội dung câu hỏi.
Đoạn
Code:
Chỉ cần so sánh lớn hơn là đủ.
Vòng lặp thứ 2 có vấn đề nhầm lẫn khi sử dụng biến
Bài toán này có thể gom lại 1 vòng lặp là đủ.
chỉ e làm bằng 1 vòng lặp với
dùng 2 vòng lặp e làm được rồi
cảm ơn anh! |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
20/03/2009 12:40:19 (+0700) | #6 | 173887 |
VaT
Member
|
0 |
|
|
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
|
|
Một vòng lặp. Bạn đọc kĩ để hiểu giải thuật nhé.
Code:
#include "stdafx.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
int NumId[10]={0,0,0,0,0,0,0,0,0,0};
double CurNum=0;
int MaxNum,TempNum;
MaxNum = 0; TempNum = 0;
cout << "Nhap vao mot so: ";
cin >> CurNum;
while (CurNum!=0)
{
TempNum = (int)CurNum % 10;
if (MaxNum <= TempNum) MaxNum = TempNum;
NumId[TempNum]++;
CurNum = (CurNum-TempNum)/10;
}
cout << "So Max : "<< MaxNum << endl <<"So luong:"<<NumId[MaxNum]<< endl;
return 0;
}
|
|
|
|
|
[Question] giúp e bài tập c này với |
20/03/2009 13:22:59 (+0700) | #7 | 173889 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
@anglezero: Đưa đoạn mã vào [ code ] tag cho dễ đọc: /hvaonline/posts/list/23321.html
anglezerohacker wrote:
hãy đếm số lượng chữ số lớn nhất của số nguyên dương n
Ban đầu đọc câu hỏi này mình không hiểu. Mình cứ diễn giải theo ý là: một số nguyên dương có bao nhiêu chữ số thì nó rành rành ra đấy rồi, không hiểu cái "số lượng chữ số" lớn nhất là thế nào? Hì hì.
Đọc xuống dưới mới vỡ ra rằng hóa ra câu hỏi trên được hiểu là: "Cho số nguyên dương n. Hãy đếm xem n có bao nhiêu chữ số lớn nhất?"
@VaT: Mình nghĩ thay NumId=DigitId, MaxNum=MaxDigit, TempNum= LastDigit có khi hay hơn ấy nhỉ. Bạn nghĩ sao?
|
|
Let's build on a great foundation! |
|
|
|
[Question] giúp e bài tập c này với |
20/03/2009 14:08:29 (+0700) | #8 | 173894 |
VaT
Member
|
0 |
|
|
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
|
|
Bác quanta hiểu sai rồi :
Không phải là
"Cho số nguyên dương n. Hãy đếm xem n có bao nhiêu chữ số lớn nhất?"
Mà phải là
"Cho số nguyên dương n. Chữ số nào trong số n xuất hiện nhiều nhất và bao nhiêu lần"
quanta wrote:
@VaT: Mình nghĩ thay NumId=DigitId, MaxNum=MaxDigit, TempNum= LastDigit có khi hay hơn ấy nhỉ. Bạn nghĩ sao?
Ừ. Mình cũng thấy vậy. Do code nhanh nên không có tô vẽ nhiều . |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
20/03/2009 22:25:17 (+0700) | #9 | 173908 |
|
anglezero
Member
|
0 |
|
|
Joined: 19/03/2009 11:07:24
Messages: 19
Offline
|
|
em mới học c nen chỉ biết viết bằng 2 vòng lặp
viết 1 vòng lặp như mấy a khó quá
e xem không hiểu j hết
vì trình độ e chưa đủ khả năng để hiểu
e cảm ơn mấy anh! |
|
|
|
|
[Question] giúp e bài tập c này với |
21/03/2009 00:13:07 (+0700) | #10 | 173924 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
VaT wrote:
Bác quanta hiểu sai rồi :
Không phải là
"Cho số nguyên dương n. Hãy đếm xem n có bao nhiêu chữ số lớn nhất?"
Mà phải là
"Cho số nguyên dương n. Chữ số nào trong số n xuất hiện nhiều nhất và bao nhiêu lần"
Edited: Ơ, hình như bạn nhầm. Lời giải thích này không đúng cho đoạn code trên của bạn.
@anglezero: Bạn không hiểu chỗ nào? |
|
Let's build on a great foundation! |
|
|
|
[Question] Re: giúp e bài tập c này với |
21/03/2009 01:42:12 (+0700) | #11 | 173945 |
FaL
Moderator
|
Joined: 14/04/2006 09:31:18
Messages: 1232
Offline
|
|
@VaT:
Thay NumId[] bằng 1 biến count, sau mỗi lần thay đổi MaxNum khởi tạo lại count = 1 cũng được.
CurNum ko nhất thiết khai báo double. Khai báo int thì trong phép chia cho 10 C sẽ tự động ép kiểu cho bồ.
PS: Đọc tới chỗ bồ VaT giải thích tui mới hiểu đề bài |
|
Hãy giữ một trái tim nóng và một cái đầu lạnh |
|
|
|
[Question] Re: giúp e bài tập c này với |
21/03/2009 02:11:47 (+0700) | #12 | 173949 |
choc_
Member
|
0 |
|
|
Joined: 27/01/2009 06:46:01
Messages: 122
Offline
|
|
VaT wrote:
Một vòng lặp. Bạn đọc kĩ để hiểu giải thuật nhé.
Code:
#include "stdafx.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
int NumId[10]={0,0,0,0,0,0,0,0,0,0};
double CurNum=0;
int MaxNum,TempNum;
MaxNum = 0; TempNum = 0;
cout << "Nhap vao mot so: ";
cin >> CurNum;
while (CurNum!=0)
{
TempNum = (int)CurNum % 10;
if (MaxNum <= TempNum) MaxNum = TempNum;
NumId[TempNum]++;
CurNum = (CurNum-TempNum)/10;
}
cout << "So Max : "<< MaxNum << endl <<"So luong:"<<NumId[MaxNum]<< endl;
return 0;
}
Nếu mình nhập vào một số âm cho CurNum thì chuyện gì sẽ xảy ra nhỉ? :-p |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
21/03/2009 02:17:09 (+0700) | #13 | 173951 |
VaT
Member
|
0 |
|
|
Joined: 04/09/2008 00:17:52
Messages: 87
Offline
|
|
quanta : Mình gõ thiếu mất. Phải hiểu là "Cho số nguyên dương n . Xác định xem chữ số lớn nhất trong số n đó xuất hiện bao nhiêu lần"
FaL : Cũng được. Nhưng làm như thế để bạn hiểu dễ dàng hơn. Mình code nhanh nên chưa tối ưu.
choc_ : Tất nhiên là bị lỗi rồi
Have nice day! |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
21/03/2009 02:20:10 (+0700) | #14 | 173953 |
choc_
Member
|
0 |
|
|
Joined: 27/01/2009 06:46:01
Messages: 122
Offline
|
|
@VaT: lỗi đó nghiêm trọng àh nha. Trong trường hợp khác thì rất dễ crash hoặc thậm chí là chạy mã luôn (coi topic tìm lỗi chương trình C của mình). Mình đang suy nghĩ xem trong trường hợp này thì làm sao crash được chương trình của bạn. |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
21/03/2009 09:13:26 (+0700) | #15 | 174039 |
|
anglezero
Member
|
0 |
|
|
Joined: 19/03/2009 11:07:24
Messages: 19
Offline
|
|
anh quanta oi!
em cảm ơn anh,nhưng e chỉ mới học c và chỉ mới học được lệnh while và if với mấy lệnh cơ bản,nên e đọc ko hiểu
anh có biết cuốn sách c nào hay không
chỉ e học với
cảm ơn anh! |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
21/03/2009 10:19:43 (+0700) | #16 | 174043 |
zerozeroone
Member
|
0 |
|
|
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
|
|
anglezero wrote:
anh quanta oi!
em cảm ơn anh,nhưng e chỉ mới học c và chỉ mới học được lệnh while và if với mấy lệnh cơ bản,nên e đọc ko hiểu
anh có biết cuốn sách c nào hay không
chỉ e học với
cảm ơn anh!
Prentice.Hall.The.ANSI.C.Programming.Language.2nd.Ed.Brian.W.Kernighan.And.Dennis.M.Ritchie
Apress_Beginning_C_From_Novice_to_Professional_4th_Edition_Oct.2006 |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
06/05/2009 02:33:26 (+0700) | #17 | 179622 |
toend2008
Member
|
0 |
|
|
Joined: 11/04/2009 03:01:03
Messages: 17
Offline
|
|
Mình cũng vừa học C được 1 tháng.Bài của bạn cái sai thứ nhất đó là khởi tạo idem=1, phải là 0 mới đúng.Bạn so sánh ở vòng lặp 2 bị sai.Mình sữa lại và chạy đúng.
Code:
#include<stdio.h>
#include<conio.h>
void main(void)
{
int idem=0,n,dv,lc,ktra;
printf("Ban nhap n = ");
scanf("%d",&n);
lc=n%10;
ktra=n;
while(n!=0)
{
dv=n%10;
if(dv>=lc)
lc=dv;
n=n/10;
}
while(ktra!=0)
{
dv=ktra%10;
if(lc==dv)
idem++;
ktra=ktra/10;
}
printf("Ket qua %d",idem);
getch();
}
|
|
|
|
|
[Question] Re: giúp e bài tập c này với |
06/05/2009 02:37:45 (+0700) | #18 | 179623 |
toend2008
Member
|
0 |
|
|
Joined: 11/04/2009 03:01:03
Messages: 17
Offline
|
|
Nói thêm vòng lặp đầu tiên của bạn anglezero kết thúc vòng lặp thì n=0 nên ở vòng lặp thứ 2 nó lấy n=0 để sài tiếp vì vậy mà kết quả luôn ra 0.Phải sử dụng lại ktra vì ta đã gán ktra=n ở đầu. |
|
|
|
|
[Question] Re: giúp e bài tập c này với |
16/05/2009 14:26:04 (+0700) | #19 | 180744 |
dra0011
Member
|
0 |
|
|
Joined: 16/05/2009 01:09:59
Messages: 2
Offline
|
|
mình post bài này bạn coi thử nha
#include<stdio.h>
#include<conio.h>
void main()
{
int vitri,dem,max;
char n,chuoi[80];
printf("nhap vao so n");
scanf("%d",&n);
vitri=0;
//bien tu chuoi string sang mang
while((chuoi[vitri++]=getchar()) !='\n');
chuoi[--vitri];
// kiem phan tu max
max=0
for (int i=0;1<vitri;i++)
if(chuoi[i]>max)
{
max=chuoi[i];
}
//dem so lan
dem=0
for(i=0;i<vitri;i++)
{
if(chuoi[i]==max)
dem=dem+1;
}
printf("%d","so lan ky tu max xuat hien la",dem);
getch();
} |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|