| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:简单题目,求解题思想,能附上代码更好了,求所绘制图形面积。
只看楼主 加入收藏
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
结帖率:92.59%
收藏
已结贴  问题点数:20 回复次数:8 
简单题目,求解题思想,能附上代码更好了,求所绘制图形面积。
题目,读入一个字符串, U -表示up(上,即向上走1个单位距离), D - down(下), R - right(左), L - left(右).
输出所围成图形面积。

Sample Input
2/*表示测试数据组数*/
DLULDDRRRUUULD
UUUULLLLDDDDRRRR
 
Sample Output
case 1: 6/*题目有点含糊,但看看样例,用手画画就明白了的*/
case 2: 16
搜索更多相关主题的帖子: 解题 思想 面积 图形 
2009-08-06 23:55
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:0 
哎,发现满足你的情况,却无法满足其他情况,还得继续想。。。

基本思路是这样:
起点为坐标原点,每次移动记录坐标,计算新增加或者减少的面积
最后检查是否回到起点,如果没回到起点,面积直接为0

[ 本帖最后由 soler 于 2009-8-8 11:33 编辑 ]
2009-08-08 04:13
airhiphop
Rank: 4
来 自:江苏南通
等 级:业余侠客
帖 子:69
专家分:256
注 册:2007-11-16
收藏
得分:0 
恩,是否能构成一个封闭的图形
走的是否正确,LR和UD不能连在一起出现

2009-08-08 06:52
huicpc0876
Rank: 2
等 级:论坛游民
帖 子:69
专家分:50
注 册:2009-7-24
收藏
得分:0 
回复 5楼 soler

你怎么计算它什么时候增加,增加的又是多少呢,想对应的,什么时候减少,减少的有事多少?
2009-08-08 17:50
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:20 
我也不知道我做的对不对,反正先发上来讨论一下吧,看看有没有更好一点的算法。感觉我这种方法太笨拙了,但是好歹把它写出来了。看看有没有好的方法精简一下代码。
#include <stdio.h>
#include <string.h>
#include <math.h>

struct dot
{
    int x;
    int y;
};

int main()
{
    char str[30];

    printf("pls enter the direction(U/D/L/R):\n");
    gets(str);

    struct dot line,*pp;
    int i,j=0;
    int temp,area[30]={0};
    int arr[4]={0};

    pp=&line;//设定原点
    pp->x=0;
    pp->y=0;
    for(i=0;str[i]!='\0';i++)
    {
        temp=0;
        switch(str[i])
        {
            case 'U':pp->y++;break;
            case 'D':pp->y--;break;
            case 'L':pp->x--;break;
            case 'R':pp->x++;break;
        }//上下左右,对应的坐标加减

        if(str[i+1]!=str[i])
                temp=line.x*line.y;//即将出现的下一个字母如果与当前字母不同,
                                   //计算当前坐标与原点构成的面积
        if(temp)
        {
            if(j%2==0)
                area[i]=(-1)*temp;
            else
                area[i]=temp;
            j++;
        }//第一个面积为+,第二个面积则为-。
        if(pp->x>=0&&pp->y>=0)
            arr[0]=i;
        else if(pp->x<=0&&pp->y>=0)
            arr[1]=i;
        else if(pp->x<=0&&pp->y<=0)
            arr[2]=i;
        else
            arr[3]=i;
    }//划分不同象限对应的面积在area[]中的存储界限。

    int min,t;
    for(i=0;i<3;i++)
    {
        min=i;
        for(j=i+1;j<4;j++)
        {
            if(arr[min]>arr[j])
                min=j;
        }
        t=arr[min];arr[min]=arr[i];arr[i]=t;
    }//把界限从小达到排序

    int area1=0,area2=0,area3=0,area4=0;
    for(i=0;str[i]!='\0';i++)
    {
        if(i<=arr[0])
            area1+=area[i];
        else if(i<=arr[1]&&i>=arr[0])
            area2+=area[i];
        else if(i<=arr[2]&&i>=arr[1])
            area3+=area[i];
        else area4+=area[i];

    }//计算各象限的面积之和;

    int TotalArea;
    TotalArea=abs(area1)+abs(area2)+abs(area3)+abs(area4);
    if(pp->x!=0&&pp->y!=0)
        printf("Total area is 0\n");
    else
        printf("Total area is %d\n",TotalArea);//最后一个坐标是否回到原点,否则面积为0;

    return 0;
}

[ 本帖最后由 soler 于 2009-8-8 18:23 编辑 ]
2009-08-08 18:21
喜喜
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:31
专家分:35
注 册:2009-7-28
收藏
得分:0 
楼上的好强啊,厉害,佩服
2009-08-08 20:42
快速回复:简单题目,求解题思想,能附上代码更好了,求所绘制图形面积。
数据加载中...
 
   



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

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