| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2266 人关注过本帖
标题:C语言初学者,求程序。。。。。。
只看楼主 加入收藏
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 40# 蓝色线段树 的帖子:我还有哪些不足的地方吗?谢谢。
程序代码:
/*******************************************************************************

        从键盘输入一个2*3的数组,找出其中的最小值,并记录行号和列号。

*******************************************************************************/
#include<stdio.h>
#include<string.h>
int main(void)
{
    int a[2][3];
    int i,j,num=1,min;
    puts("input a:");
    for(i=0;i<2;i++)
        for(j=0;j<3;j++,num++)
        {
            printf("NO.%d\n",num);
            scanf("%d",&a[i][j]);
            min=a[0][0];
            if(min>a[i][j])
                min=a[i][j];
        }
    printf("min=%d\n",min);
    for(i=0;i<2;i++)
        for(j=0;j<3;j++)
            if(min==a[i][j])
                printf("row=%d,column=%d\n",i,j);
    return 0;
}
2008-10-22 18:13
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
既然你输入的时候,就顺便查找了,那为什么还查找第二次呢?第一次就可以保存下来行列号。

其实,这个题最简单的方法是将二维数组转为一维来查找,只需要在最后输出的时候做做手脚,就可以输出二维的坐标了。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-22 18:56
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
晕……刚才还没仔细看……41L的算法根本就是错的,你自己试试看3 2 1 2 3 4。只要a[1][2]大于a[0][0],答案就是a[0][0],否则答案是a[1][2]……
给出使用一维数组的例子,将a声明为二维数组只是为了说明,其实可以直接将a定义为一维数组:
程序代码:
#include <stdio.h>

int main(void)
{
    int a[2][3], *pa = (int*)a;
    int i, min = 0;
    scanf("%d", &pa[0]);
    for (i = 1; i < 6; i++)
    {
        scanf("%d", &pa[i]);
        if (pa[min] > pa[i])
            min = i;
    }
    printf("min=%d\nrow=%d,column=%d\n", pa[min], min / 3, min % 3);
    return 0;
}

如果不计较代码变得晦涩的话,还可以这么写,下面的代码,第一次循环的if永远不会执行,这点是故意而为的:
程序代码:
#include <stdio.h>

int main(void)
{
    int a[2][3], *pa = (int*)a;
    int i, min = 0;
    for (i = 0; i < 6; i++)
    {
        scanf("%d", &pa[i]);
        if (pa[min] > pa[i])
            min = i;
    }
    printf("min=%d\nrow=%d,column=%d\n", pa[min], min / 3, min % 3);
    return 0;
}

刚刚看完了整个帖子,如果要判断多个位置的话(窃以为没必要,如果是函数只要决定初始位置就可以判断多个位置了,对于单独的示例程序,更根本不需要这种判断),见以下的程序:
程序代码:
#include <stdio.h>
#include <limits.h>

int main(void)
{
    int a[2][3], *pa = (int*)a;
    int i, min = INT_MAX;
    for (i = 0; i < 6; i++)
    {
        scanf("%d", &pa[i]);
        if (min > pa[i])
            min = pa[i];
    }
    printf("min=%d\n", min);
    for (i = 0; i < 6; i++)
    {
        if (pa[i] == min)
            printf("\trow=%d,column=%d\n", i / 3, i % 3);
    }
    return 0;
}


[[it] 本帖最后由 StarWing83 于 2008-10-22 19:23 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-22 19:07
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
SW的代码令某十分佩服,茅塞顿开。本来昨晚想到利用一维数组的,但始终没想到解决下标转换的方法。看来这题没白弄,又会了一种方法……
2008-10-22 21:13
快速回复:C语言初学者,求程序。。。。。。
数据加载中...
 
   



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

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