| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 382 人关注过本帖
标题:看看这个程序!!
只看楼主 加入收藏
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
结帖率:89.66%
收藏
已结贴  问题点数:20 回复次数:4 
看看这个程序!!
本次电视购物采取唯一最低价拍卖一部手机。
手机的起价是100元,封顶价是1000元。用户可以发送短信编写自己愿意出的钱数(以元为单位,且必须是整数)到1688888,最后出价最低,并且没有与其余用户出价相同者可以凭自己出的价钱购买到这部手机。  

输入

输入所有用户的出价。
每个人的出价都是一个整数i。当i是-1的时候表示输入结束。否则如果i在100到1000之间,表示这个用户的出价是i元。如果i不是-1,也不是合法的出价,表示这个用户发送错误,不作处理。
特别注意100和1000都是合法的出价。


输出

输出最后拍到这部手机的用户所出的价格。如果没有任何人符合条件,则输出-1。
输出完毕之后请换行。

样例输入

50 100 100 100 102 120 102 108 300 -1

样例输出

108
也就是说当有两个或两个以上的价格相同时就可以忽略他们了,然后在没有相同的价格中再找出最小的那个数!
程序代码:
#include <stdio.h>
#include <string.h>
#define N 10
int main(void)
{ 
    int i=0,j,t=0,tempt;
    int total = 0;
    int string[N],a[N];
    scanf("%d",&string[i]);
    while(string[i]!=-1 && i<N)
    {
        if( string[i]>=100 && string[i]<=1000)
              i++;
                          /*输入数组元素*/
        scanf("%d",&string[i]);
    }
    total = i;
    printf("\n");
    for(i=0;i<total-1;i++)
    { 
        t=0;
        for(j=i+1;j<total;j++) /*看数组中的元素有没有相同的有的话就置相同的那个数为0*/
        {
            if(string[i] == string[j] && string[j] != 0 && string[i] != 0)
            {
                string[j]=0;
                t=1;
            }
        }
        if(t)
            string[i] = 0;    /*把用于比较的那个数也置为0*/
    }
    i = 0;
    j = 0;
    while(i<total)
    { 
        if(string[i]!=0)
        {
            a[j]=string[i];
            j++;
        }                           /*用于输出留下来的数,并且赋给a[i]*/ 
        i++;
    }
    total = j;
    printf("\n");
    for(i=0;i<total;i++)
    {
        for(j=i;j<total;j++)
        { 
            if(a[i] > a[j])
            {
                tempt=a[i];              /*排序比较出最小的那个数*/
                a[i]=a[j];
                a[j]=tempt;
            }
        }
    }
    printf("%d\n",a[0]);          /*输出*/
    return 0;
}

这个代码怎么实现不了这个功能?求指点!
2010-12-04 15:18
dragonku7
Rank: 2
等 级:论坛游民
帖 子:1
专家分:20
注 册:2010-12-4
收藏
得分:20 
测试输出的结果是108呢
2010-12-04 16:06
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
这个程序我怎么得不到结果!

付出终将有回报!Ibelieve!
2010-12-04 18:32
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
有了,sorry!

付出终将有回报!Ibelieve!
2010-12-04 18:37
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

struct Node                        
{
    short money;                                    // 存放用户给出的价络
    Node * pNext;                                    // 用于链接下一个结点
};

Node * initiailNode()                            // 用于初始化链表的函数,并返回头结点,失败返回NULL
{
    Node * pHead = (Node *)malloc(sizeof(Node));
    if(pHead == NULL) {
        printf("内存不足, 程序退出!\n");
        exit(-1);
    }
    pHead->pNext = NULL;
    return pHead;
}

bool add(Node * pHead, short money)    // 增加一个结点,成功反回true否则返回false
{
    Node * p = pHead;
    while(true) {
        if(p->pNext == NULL) {
            p->pNext = (Node *)malloc(sizeof(Node));
            if(p->pNext == NULL)
                return false;
            p->pNext->pNext = NULL;
            p->pNext->money = money;
            return true;
        }
        p = p->pNext;
    }
}

short findOnlyMinimum(Node * p)    // 找到出价最低的money       
{
    bool isMoreMinimum = false;        // 判断是否有两个以上同样小的价络, 默认为false
    if(p->pNext == NULL)
        return -1;
    short min = p->pNext->money;
    p = p->pNext;
    while(p->pNext != NULL) {
        if(p->pNext->money < min) {
            min = p->pNext->money;
            isMoreMinimum = false;
        } else if(p->pNext->money == min) {
            isMoreMinimum = true;
        }
        p = p->pNext;
    }
    if(!isMoreMinimum)
        return min;
    return -1;
}

int main()
{
    short money;
    Node * pHead = initiailNode();
    while(true) {
        scanf("%d", &money);
        if(money == -1)
            break;
        else if(money < 100 || money > 1000)
            ;
        else if(!add(pHead, money)) {
            printf("内存分配失败, 程序退出!\n");
            exit(-1);
        }
    }
    printf("%d\n", findOnlyMinimum(pHead));
    system("pause");
    return 0;
}
你的程序限制了用户的数量,不能动态扩增,则应该用链表来做.
输入
50 100 100 100 102 120 102 108 300 -1
输出
-1

My life is brilliant
2010-12-04 22:19
快速回复:看看这个程序!!
数据加载中...
 
   



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

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