| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 931 人关注过本帖, 1 人收藏
标题:2个题目。来做做看…
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
问题2, 可以计算把圆分成 3 ~ 1000 份时各种三角形的个数。解此题只需输入 10 即可

#include <stdio.h>

int main() {
    int acute_t_cnt = 0, obtuse_t_cnt = 0, right_t_cnt = 0, i, j, slices;    // acut: 锐角, right:直角, obtuse: 钝角
    
    printf("How many slices do you want to cut a circle into? ( >=3 && <=1000 ) ");
    scanf("%d", &slices);
    while (slices < 3 || slices > 1000) {
        printf("You must be kidding, please give me a natural number ( >=3 && <=1000 ): ");
        scanf("%d", &slices);
    }
    
    for (i = 2; i < slices / 2; i++) {
        obtuse_t_cnt += slices / 2 - i;
    }
    obtuse_t_cnt *= 10;
    
    if (slices % 2 == 0) {
        right_t_cnt = (slices / 2 - 1) * slices;
    } else {
        right_t_cnt = 0;
    }
    
    acute_t_cnt = slices * (slices - 1) * (slices - 2) / 6 - obtuse_t_cnt - right_t_cnt;
    printf("\nWhen cut into %d slices, there would be\n\t%d acute triangles\n\t%d right triangles\n\t%d obtuse triangle\nwith their vertexes overlapping the cutting points.\n\n", 
                slices, acute_t_cnt, right_t_cnt, obtuse_t_cnt);
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-17 23:48 编辑 ]
2011-04-17 23:41
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
问题1

程序代码:
#include <stdio.h>

int main() {
    int i, j, k, ans = 0;
    // 椅子按直线排列,即首尾不相连
    for (i = 1; i < 7; i++) {
        for (j = i + 2; j < 9; j++) {
            ans += 10 - (j + 1);
        }
    }
    printf("%d\n", ans);

    // 椅子按环形排列,即首尾相连
    printf("%d\n", ans - 1);
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-18 00:07 编辑 ]
2011-04-18 00:05
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这两道题确实都不是很容易。感觉 voidx 能立刻想到直线和环形的区别,思考方式还是比较专业的。

我只说下我的思路,不太想细做。
1,这种计数问题,组合数学里有神器 容斥原理。这个不仅能给出形式公式,还方便编程求解,所以肯定是求这种问题的首选。不会容斥原理的,可以自行百度一下。
2,这三种三角形的特点是:直角必有一对顶点位于一条直径的对端;钝角的三个点都在某条直径的同侧;锐角就是不是以上两种情况的(或者存在一条直径使三顶点不在同侧,这个条件相对不太好测出来)。之后就是计数问题。其实这种知道三种三角形的特征之后就比较好计数了,用十个点的五条直径来构造计数。
2011-04-18 00:27
快速回复:2个题目。来做做看…
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.126560 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved