| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2732 人关注过本帖
标题:关于田忌赛马问题.。。帮忙看下。。谢谢了。。
只看楼主 加入收藏
iweek
Rank: 1
等 级:新手上路
帖 子:12
专家分:6
注 册:2008-12-20
收藏
得分:5 
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#define N 1000
int tianji[N];
int king[N];
int x,tx, //赢得次数  
    y,ty, //输的次数
    z,tz; //平的次数
          //x,y,z 用来存放最终结果

void prt(int a[], int n);

void sort(int a[], int n)//有打到小排序
{
    int x, y;
    int temp;

    for(x = 0; x < n; x++)
    {
        for(y = x+1; y < n; y++)
        {
            if(a[x] < a[y])
            {
                temp = a[x];
                a[x] = a[y];
                a[y] = temp;
            }
        }
    }
}

void f(int tianji[], int king[], int n) // 把符合条件数字写入全局变量 x,y,z中
{
    int i,j;
    int temp;
    int k;

    sort(tianji, n);
    printf("tianji     ");
    prt(tianji, n);

    sort(king, n);
    printf("king       ");
    prt(king , n);

    for(i = 0; i < n; i++) // 循环比较
    {
        k = 0;
        temp = i;//保存
        i = 0;

        for(j = temp ; j < n; j++,i++)
        {
            if(tianji[i] > king[j])
            {
                tx++;
            }
            else if(tianji[i] < king[j])
            {
                ty++;
            }
            else
            {
                tz++;
            }
        }

        ty += temp;
        if((tx-ty) > (x-y))
        {
            x = tx;
            y = ty;
            z = tz;
        }
        i = temp;//恢复
        k++;
        tx = 0;
        ty = 0;
        tz = 0;
    }
}


void init(int a[], int n) //初始化数组
{
    int i;

    for(i = 0; i < n; i++)
    {
        a[i] = rand()%100;
    }
}

void prt(int a[], int n) //打印数组
{
    int i;

    for(i = 0; i < n; i++)
    {
        printf("%4d",a[i]);
    }
    printf("\n");
}


int main()
{
    int n;

    n = 8;
    init(tianji,n);
    init(king, n);

    printf("tianji     ");
    prt(tianji, n);
    printf("king       ");
    prt(king , n);
    puts("***********************************");
    f(tianji, king ,n);
    printf("\n");
    printf("\n赢的次数x = %d",x);
    printf("\n输的次数y = %d\n",y);
    printf("平的次数z = %d\n",z);
}
2009-08-03 18:07
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
哇好强悍的程序。。。。。
2009-08-03 18:38
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
可是没解决我的问题
我的程序为什么是错的呢?。。
2009-08-03 18:40
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
回复 11楼 iweek
厉害!

[[it] 本帖最后由 CrystalFan 于 2009-8-3 18:45 编辑 [/it]]
2009-08-03 18:42
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
看下他的算法,
void f(int tianji[], int king[], int n)
里面
2009-08-03 18:43
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
解决下我的问题先。。。。。。。谢谢
2009-08-03 18:55
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
本题算法错误。。在这里给一下正确的答案。。。。。谢谢各位。。。。
#include<stdio.h>
#include<stdlib.h>
long a[10000],b[10000];
int cmp( const void *a, const void *b )
{
    return ( *( long *)a) - ( *( long *)b);
}
int main()
{
   long n;
while(1)
{
long sum=0,i,j,end1,end2;
   scanf("%ld",&n);
   if(n==0) break;
   for(i=0;i<n;i++)
    scanf("%ld",&a[i]);
   for(i=0;i<n;i++)
    scanf("%ld",&b[i]);
        qsort( a, n, sizeof( long ), cmp );
   qsort(b, n, sizeof( long ), cmp );
   j=0;
     for(i=j=n-1,end1=end2=0;j>=end2&&i>=end1;j--)
   {
     if(a[i]>b[j])
     {
       sum++;
    i--;
     }
     else if(a[i]<b[j])
     {
        sum--;end1++;
     }
     else
     {
         if(a[end1]>b[end2])//a最弱的马强于b最弱的马
      {
        sum++;end1++;end2++; j++;
      }
      else if(a[end1]<b[end2])
      {
         sum--;end1++;
      }
      else
      {
         if(a[end1]==b[j])
      {
       end1++;
      }
      else
      {
          sum--;end1++;
      
      }
      
      }
     }
   }
printf("%d\n",sum*200);
}
return 0;
}
2009-08-03 19:21
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
0000000000000000
2009-08-03 20:16
xiaoyuer110
Rank: 2
等 级:论坛游民
帖 子:37
专家分:17
注 册:2009-7-29
收藏
得分:0 
呵呵!慢慢来了!

除学者!不是败给程序不懂!而是编的时候不够心细!
2009-08-03 20:44
soky
Rank: 4
等 级:业余侠客
帖 子:126
专家分:228
注 册:2009-7-13
收藏
得分:0 
穷举法,我最烦这个了,很麻烦
2009-08-03 21:53
快速回复:关于田忌赛马问题.。。帮忙看下。。谢谢了。。
数据加载中...
 
   



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

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