六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 294|回复: 0

蛮力法的使用:-1083: False coin(1)

[复制链接]

升级  16%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
8
 楼主| 发表于 2012-12-30 16:10:58 | 显示全部楼层 |阅读模式
蛮力法的使用:-1083: False coin(1)

<div class="postbody"><div id="cnblogs_post_body">题目:http://acm.hzic.edu.cn/JudgeOnline/problem.php?id=1083
思路很简单 :把所有的金币都试一遍。
Step 1: 依次假设I号金币是假的;
Step 2: 对称量的记录进行检测;如果假设与所有的记录都不矛盾,则有可能是假的 ;
Step 3: 如果有可能是假的金币只有一个,则输出他的编号;否则输出为0;
HINT  


  • 不需要特殊的数据结构;
  • 算法采用暴力搜索;
<div class="cnblogs_code" >View Code <div id="cnblogs_code_open_ae7c64f4-1929-41bc-a53a-9ebf1a97c5df" class="cnblogs_code_hide"> 1 #include<iostream> 2 using namespace std; 3 int jd(int,int *,char); 4 int main() 5 { 6     int num[100][1001]; 7     char s[1000];//输入内容 8     int n,i,j,t,k,no; 9     cin>>n>>k;10     for(i=0;i<k;i++)11     {12         cin>>num[0];13         for(j=1;j<=2*num[0];j++)14         {15             cin>>num[j];16         }    17         cin>>s;    18     }//以上为输入参数 19     for(i=1,t=0;i<=n;i++)//暴力搜索所有的情况 20     {21         for(j=0;j<k&&jd(i,num[j],s[j]);j++);22         //对所有情况的称量记录进行检测 23         if(j<k) continue;24         t++;//t保存嫌疑对象的个数 25         if(t>1)26         break;27         no=i; 28     } 29     if(t-1)30     cout<<0<<endl;31     else cout<<no<<endl;32     return 0;33 }34 35 int jd(int j,int *s,char c)36 {37     //函数判断假设j号金币是假的与称量结果是否矛盾38     //s是称量记录,其第一个元素是砝码个数39     //c是称量结果 40     int m,i,f;//f是判断测量是否含含有j号金币 41     m=s[0]<<1;//m是砝码个数乘以2,是指天平左右的总数 42     for(i=f=1;i<=m&&f;)43     if(s==j)44     f=0;45     else 46     ++i;47     //判断本次称量有没有j号金币。 48     if(!f&&c=='=' || f&&c!='=')49    return 0;//与假设矛盾 50    return 1;51 }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表