iT邦幫忙

0

R語言 函數 迴圈

r
  • 分享至 

  • xImage

題目是:有一最簡分數,其分子、分母和為70,將其化為小數並四捨五入後為0.6,則此分數為何?

目前寫的程式碼是``
my.coprime <- function(a,b)
{
k <- 0
for(i in 2:(b-1))
{
if((a%%i==0)&&(b&&i==0))
{ k <- k+1 }
}
}
if ( k==1 ){
return (TRUE)}else{
return (FALSE)}

跑得時候出現 錯誤: 沒有可回返的函式, 跳到最高層
請問是哪裡有問題

後面的程式
for(a in 1:70)
for(b in 1:70)
{
if((a+b==70)&&(my.coprime(a,b))&&(a/b>=0.55)&&(a/b<0.65))
{ msg <- sprintf("%d/%d",a,b)
print(msg) }
}

obarisk iT邦研究生 1 級 ‧ 2021-06-16 07:51:53 檢舉
```
if ( k==1 ){
return (TRUE)}else{
return (FALSE)}
```

這段沒有在 function 內
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
0
jiehong
iT邦新手 5 級 ‧ 2021-06-16 10:32:34
homework <- function(Sum=70, Div=0.6, Dec=1){
  do.call(c,lapply(1:Sum, function(x){
    y=Sum-x
    tmp <- round(x/y, Dec)
    if(tmp == Div){
      return(paste(x,"/",y, sep = ""))
    }
  }))
}
0
obarisk
iT邦研究生 1 級 ‧ 2021-06-16 22:15:10
my.coprime <- function(a, b) {
  k <- 1 # 公因數數目. 必然有 1 這個公因數
  for (i in min(a, b):2) { # 從大到小找公因數. 最大值是 min(a, b).
    # 如果可以找到同時整除 a 跟 b 的因數, 把 k + 1.
    k <-  k + ifelse(a %% i ==0 && b %% i == 0, 1, 0)
  }
  return(ifelse(k == 1, TRUE, FALSE)) # 如果公因數只有 1 則為 TRUE, 否則為 FALSE
}

或是用 gcd

my.gcd <- function(a, b) {
  ifelse(a %% b, gcd(b, a %% b), b) == 1
}

迴圈部份

for(a in 1:70) {
  b <- 70 - a
  if ((my.coprime(a,b)) && round(a/b*10) == 6) {
    msg <- sprintf("%d/%d", a, b)
    print(msg)
  }
}

我要發表回答

立即登入回答