2019独角兽企业重金招聘Python工程师标准>>>

自己代码的两个失误:

1,既然已经告诉了数字集合是1到9,那么穷举两个乘数就是111~999 和 11~99,没有必要根据用3层循环得出两个乘数

2,没有使用string.h自带的函数sprintf和strchar, 手写判断函数check太繁琐

char c[10],buf[20];
int abc,de,x,y,z;
... ...
sprintf(c,"%d",z);                        --把z中的数值转化为字符传到c数组中
sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);   --多个数值转化strchr 函数:返回某元素在字符串中位置的指针,不存在则返回NULL,现假定c不存在与数组s中,则 strchr(s,c) == NULL;

来自http://blog.sina.com.cn/s/blog_94146ef20101baow.html

的代码:

# include<stdio.h>
# include<string.h>int main(void)
{//freopen("crypt1.in","r",stdin);//freopen("crypt1.out","w",stdout);char s[20],buf[20],c[10],d[10],e[10];int i,ok,abc,de,x,y,z,count = 0;int a[10],n;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)s[i] = a[i]+'0';s[i] = '';for(abc=111;abc<=999;abc++){for(de=11;de<=99;de++){x = abc*(de%10);y = abc*(de/10);z = abc*de;sprintf(c,"%d",z);sprintf(d,"%d",y);sprintf(e,"%d",x);if(strlen(c)!=4||strlen(d)!=3||strlen(e)!=3)continue;ok = 1;sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);for(i=0;i<strlen(buf);i++)if(strchr(s,buf[i]) == NULL){ok = 0;break;}if(ok)count++;}}printf("%dn",count);return 0;
}

自己的ugly work,当然也能过:

/*
ID: nenusb1
LANG: C
TASK: crypt1
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int num[10];
int n;int cmp(const void * a, const void * b){return (*(int * )a - *(int * )b);
}int match(int digit){int i;for(i=0; i<n; i++){if(num[i] == digit) return 1;}return 0;
}//数字是否存在于给定集合中
int check(int x){int digit;while(x>0){digit = x%10;  if(!match(digit)) return 0;x = x/10;}return 1;
}int main(){freopen("crypt1.in","r",stdin);freopen("crypt1.out","w",stdout);int i,j,k;scanf("%d",&n);for(i=0; i<n; i++){scanf("%d", &num[i]);}//排序 qsort(num,n,sizeof(int),cmp);int prod1, prod2,result; int mul[730];//第一个乘数 int count = 0;//需要事前单独生成第一个乘数for(i=0; i<n; i++){for(j=0; j<n; j++){  for(k=0; k<n; k++){mul[count++] = num[i]*100 + num[j]*10 + num[k];    }      }      }int solutionCount = 0;for(j=0; j<n; j++){          for(k=0;  k<n; k++){for(i=0; i<count; i++){prod1 = num[j] *  mul[i];prod2 = num[k] * mul[i]; result = prod2 * 10 + prod1;//超过3位, 循环后面的数字只会更大,所以 break ,注意break 的是for i循环 if ( prod1>999 || prod2>999 || result>9999) { break;}//或 含有非集合中的数字, continue if (!check(prod1) || (!check(prod2)) || (!check(result))) continue;solutionCount++;
//                 printf("%d : \n",mul[i]);
//                 printf("%d %d\n", num[j], num[k]);
//                 printf("%d %d\n", prod1, prod2);
//                  printf("-----%d-------\n",result);}      }      }    printf("%d\n",solutionCount);return 0;
}

转载于:https://my.oschina.net/kaneiqi/blog/223403

USACO crypt1相关推荐

  1. 最简单的USACO,没有之一:【USACO题库】1.3.4 Prime Cryptarithm牛式

    欢迎收看: 保障电脑安全 拒绝编译错误 DEV-C++题解 今天来看一个炒鸡简单的USACO,没有之一. 题目描述 下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫 ...

  2. usaco Shaping Regions

    这就是usaco 前面的windows area的变形. /* ID:jinbo wu TASK:rect1 LANG:C++ */ #include<iostream> #include ...

  3. usaco Postal Vans(dp)

    是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...

  4. usaco Beef McNuggets

    这两天贼烦,ccf炸了,还有一个烦心事.哎我都不知道自己能不能坚持下去了.马上期末考了.这段时间还是抓紧时间复习吧同时刷usaco的节奏要跟以前一样了,毕竟课少了. 题解: 只要你知道以下的数论结论, ...

  5. usaco前两章小结

    usaco 暑假老师有推荐做但是那个题目太长了,而且·大部分都是废话做起来特别慢,而且当时自己基本上什么都不懂,太难了所以看了题解做了两题就放弃了. 转眼就上学了,因为想学习acm所以就胡乱找题做但是 ...

  6. usaco ★Fractions to Decimals 分数化小数

    ★Fractions to Decimals 分数化小数 写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中.例如, ...

  7. usaco ★Bessie Come Home 回家

    ★Bessie Come Home 回家 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有 ...

  8. usaco Sorting a Three-Valued Sequence 三值的排序

    一开始想贪心,但是一想这是搜索章节应该用bfs?(为什么这么想看我上一个usaco的题目),,,,,,,,,,结果我贪心做出来了.然后我百度一下了别人做的好像么没人用bfs我不知道可不可以做出来. 思 ...

  9. usaco Arithmetic Progressions(看了题解)

    usaco也开始限时了,这题是搜索加剪枝.剪枝很关键.(哎........怎么才能不看题解解题啊) /* ID: jinbo wu LANG: C++ TASK: ariprog */ #includ ...

最新文章

  1. Redis 笔记(07)— sorted set 类型(添加、删除有序集合元素、获取分数范围内成员、按score排序、返回集合元素个数)
  2. mysql 优先队列_深入浅出 MySQL 优先队列(你一定会踩到的order by limit 问题)
  3. 皮一皮:直男的世界不可揣测!
  4. 图像的灰度化以及二值图函数
  5. 产品经理如何晋升为产品总监
  6. (87)FPGA面试题-同步FIFO与异步FIFO区别?异步FIFO代码设计
  7. Address already in use: bind JVM端口被占用解决方法
  8. 今天很高兴,据说微软的长春的什么要设立在我们公司
  9. fedora mysql gui,在RHEL、CentOS及Fedora上安装Drupal 8——开源内容管理系统
  10. 心理学巨著《影响力》读后总结
  11. 使用FFMPEG类库分离出多媒体文件中的H.264码流
  12. 5G商业化进程提速 运营商推进网络智能化转型
  13. win10本地策略组脚本
  14. 微信企业付款转账到微信
  15. web前端网页课程设计大作业 html+css+javascript天津旅游(11页) dw静态旅游网页设计实例 企业网站制作
  16. xv6 - lab0 - 课程介绍
  17. css:好看的渐变色_CSS渐变:语法速成课程
  18. 生活随笔:It外包的佣金、和收入构成情况
  19. 聚合图床_sojson_v6
  20. Linux全能终端,Windows全能终端神器MobaXterm

热门文章

  1. led显示屏背景墙设计_室内LED 显示屏室内安装设计
  2. cad无法加载arx文件_多年经验总结CAD技巧8
  3. Spring注入方法
  4. 洛谷 5205 【模板】多项式开根
  5. HTML-语义类标签
  6. 【Touchinput 】触摸和输入 概述(1)
  7. 深入理解ES6--1.块级绑定
  8. android构建过程
  9. 面向过程和面向对象编程的优缺点
  10. rsync 相关参数