ページ 11

三角形が作れるか

Posted: 2012年12月21日(金) 13:50
by koko
n本の棒があり棒iの長さはai。その棒から3つ選びできるだけ周囲の長い三角形を作り、
最大の周囲の長さを求めるプログラムなのですが、
n=5
a=2 3 4 5 10
としたとき12となりません。どこがいけないのでしょうか…

コード:

#include <stdio.h>

int max(int a, int b, int c){
    int maxans=a;
    if(maxans < b) maxans=b;
    if(maxans < c) maxans=c;
    return maxans;
}

int main(void){
    int i,j,k;
    int n;  //棒の数
    printf("n=");
    scanf("%d",&n);
    int a[n];

    printf("a=");
    for(i=0; i<n; i++){
        scanf("%d",&a[i]);
        
    }
    printf("\n");
    
    int len=0;  //3辺の合計
    int maxlen=0;  //3辺のうち一番長いもの
    int rest=0;  //短い2辺の合計
    int ans=0;
    for(i=0; i<n; i++){
        for(j=i+1; j<n; j++){
            for(k=j+1; k<n; k++){
                len=a[i]+a[j]+a[k];
                maxlen=max(a[i], a[j], a[k]);
                rest= len-maxlen;
            }
            if(maxlen<rest){
                ans = len;
            }
        }
    }
    
    if(ans==0){
        printf("can't make\n");
    }else{
        printf("%d\n",ans);
    }
    return 0;
}


Re: 三角形が作れるか

Posted: 2012年12月21日(金) 14:01
by non

コード:

            if(maxlen<rest){
                ans = len;
            }
これは、三角形が成立するかチェックしているのだと思いますが、入れる場所が違います。
また、成立した場合に、いままでの最大であるかansと比較していません。