01/10/2018, 10:18
Cho e hỏi sai chỗ nào vậy
Viết hàm inHoanChinh() sau, hàm này in ra các số hoàn chỉnh trong khoảng từ số đầu đến số cuối: void inHoanChinh ( int dau, int cuoi);
(Một số nguyên dương n được gọi là số hoàn chỉnh nếu tổng các ước số của n (không kể n ) bằng chính nó, ví dụ : 6, 28, 496, …
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void inHoanChinh(int dau, int cuoi)
int main()
{
int n, i, s;
int hc; //0: Không là số hoàn chỉnh, 1: Là số hoàn chỉnh (cờ hiệu)
printf("Nhap n: ");
scanf("%d", &n);
if(n < 1)
hc = 0; //Không là số hoàn chỉnh
else
{
//Tính tổng các ước số của n
s = 0;
for(i = 1; i < n; i++)
if(n % i == 0) s += i;
//Kiểm tra
hc = (s == n ? 1 : 0);
}
//In kết quả
{
void inHoanChinh(int dau, int cuoi)
{
for(i = dau; i <= cuoi; i++)
if(hc)
printf("Day la so hoan chinh");
else
printf("Day khong la so hoan chinh");
}
}
Bài liên quan
bạn có hàm inhoan chirng có trả về quá trị đâu mà dùng cái này
bạn có thể giúp mk đc k
mk nghĩ mãi rồi mà chả bít sữa ntn
đã vi pham nội quy diễn đàn r , tham khảo bài này
mk cam ơn b
đây là c hay C++ vậy
C++ bạn nhé , cin = scanf , cout = print bên bạn , code lại theo C xem
code của bạn nhiều chỗ sai quá.
Thứ 1: for(i = 1; i < n; i++)
–trong hàm for thì phải khai báo biến i nhé: for(int i = 1; i < n; i++)
Thứ 2:
void inHoanChinh(int dau, int cuoi)
{
for(i = dau; i <= cuoi; i++)
if(hc)
printf(“Day la so hoan chinh”);
else
printf(“Day khong la so hoan chinh”);
}
}
— Biến hc ở đây là biến cục bộ trong hàm main nên trong hàm inHoanChinh() không sử dụng được.
— Và mục đích của hàm này chỉ là in ra 2 dòng: “Day la so hoan chinh” hoặc “Day la so khong hoan chinh”
Thứ 3: Mình chỉ mới đọc code thôi nhưng mình nghĩ thuật toán của bạn cho bài này chưa chính xác. Nếu bạn muốn thì mình có thể viết lại cho bạn
ban có thể viết lại cho mk đc k
mk tham khảo
#include<stdio.h>
int hc = 0;
void kiemTraSoHoanChinh(int soCanTimUocSo){
int tongUocSo = 0;
for(int i = 1; i < soCanTimUocSo; i++){
if(soCanTimUocSo % i == 0)
tongUocSo += i;
}
hc = (tongUocSo == soCanTimUocSo ? 1 : 0);
nếu bạn không hiểu chỗ nào thì hỏi mình
#include<stdio.h>
int hc = 0;
void kiemTraSoHoanChinh(int soCanTimUocSo){
int tongUocSo = 0;
for(int i = 1; i < soCanTimUocSo; i++){
if(soCanTimUocSo % i == 0)
tongUocSo += i;
}
hc = (tongUocSo == soCanTimUocSo ? 1 : 0);
không hiểu chỗ nào thì hỏi mình nhé
for(int i = 1; i < soCanTimUocSo; i++)
nó báo lỗi chỗ này là sao b
bạn đã include stdio chưa
mk khai báo biến i ở ngoài thì mới đk
kết quả thế này
mk dùng codeblock
chác nó khác cái dev này
cái đó thì mình không biết. Sau khi khái báo biến i ở ngoài thì nó có ra kết quả không
6 posts were merged into an existing topic: Bài tập về cấu trúc rẽ nhánh
có ra kết quả b à cảm ơn b nhiều
Tag @drgnz @moderators vì topic này trùng với topic: Các bác xem giúp e code này vs
Có merge topic được không nhỉ?
Và cmt này: Cho e hỏi sai chỗ nào vậy cũng không liên quan với bài này.
cmt này trùng topic https://daynhauhoc.com/t/bai-tap-ve-cau-truc-re-nhanh/49414.
Mình nghĩ chỗ nào có mâu thuẫn
Mình nghĩ nên cho đoạn này vào một hàm gọi là
int ktHoanChinh(int n)
.return 0 if not hc else return 1
Khi đó thì trong hàm
inHoanChinh
bạn sẽ kiểm tra từng số một trong dãy đầu đến cuối.if (ktHoanChinh(i)) // same as ktHoanChinh == 1
mk vẫn chưa hiểu yk bạn