- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
USACO题目解析Prime Cryptarithm
下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。 * * *x * * ---------- * * * * * * ---------- * * * *数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.写一个程序找出所有的牛式。[编辑]格式PROGRAM NAME: crypt1INPUT FORMAT:(file crypt1.in) Line 1:数字的个数n。 Line 2:N个用空格分开的数字(每个数字都属于{1,2,3,4,5,6,7,8,9})。OUTPUT FORMAT:(file crypt1.out)共一行,一个数字。表示牛式的总数。[编辑]SAMPLE INPUT52 3 4 6 8//在digit[2、3、4、6、8]上标志1即可[编辑]SAMPLE OUTPUT1[编辑]样例分析 2 22x 2 2 ---------- 4 44 4 44 ---------- 4 8 8 4注意:结果只能为4位暴力:#include cstdio#include cstdlib#include cstring#include string#include map#include listusing namespace std;?FILE *in, *out;?voidopenfile() { in = fopen(crypt1.in, r); out = fopen(crypt1.out, w+); }voidclosefile() { fclose(in); fclose(out); }?/** TODO VAR. */intarr[10], n;bool ex[10];?int main(){openfile();fscanf(in, %d, n);memset(ex, 0, sizeof(ex));for(inti = 0; i n; i++) {fscanf(in, %d, arr + i);ex[arr[i]] = true; }?int r = 0;for(inti = 0; i n; i++)for(int j = 0; j n; j++)for(int k = 0; k n; k++)for(int l = 0; l n; l++)for(int m = 0; m n; m++) {int a = arr[i] * 100 + arr[j] * 10 + arr[k];int b = a * arr[l], c = a * arr[m], d = b + c * 10;if(b 1000 || c 1000 || d 10000) continue;if(!ex[b % 10] || !ex[c % 10] || !ex[d % 10]) continue;b /= 10, c /= 10, d /= 10;if(!ex[b % 10] || !ex[c % 10] || !ex[d % 10]) continue;d /= 10;if(!ex[b / 10] || !ex[c / 10] || !ex[d % 10] || !ex[d / 10]) continue;?r++; }?fprintf(out, %d\n, r);?closefile();return 0;}好些:#include iostream#include stdio.husing namespace std;bool mark[10];int n, a, b, num[10];bool check(int m, int k){if (m / k 0) return false;do {if (mark[m % 10] != true)return false;m /= 10; } while (m 0);return true;}int main(void){freopen (crypt1.in, r, stdin);freopen (crypt1.out, w, stdout); scanf (%d, n);for (inti = 1; i = n; i++) {scanf (%d, num[i]);mark[num[i]] = true; }int tot(0);for (
文档评论(0)