网易游戏2017互娱实习笔试编程--竖式填空

    xiaoxiao2021-03-25  65

    [编程|100分] 竖式填空 时间限制:1秒 空间限制:65536K 题目描述 小Q是名小学生,他最喜欢数学中的加法竖式填空了。例如下面的填空题,每个空格表示1…9中的一个数字。

    有时候这种竖式题不一定只有唯一解,小Q很想知道,给定一个这样的竖式,总共可能的解有多少个。 被加数和加数的位数不会超过3位。和的位数不会超过4位。空格只可能存在于被加数和加数中。

    输入描述: 每个输入数据包含多个测试点。 第一行为测试点的个数T(T<=30)。 每个测试点包含一行,包含了三个长度大于0的字符串,分别表示被加数,加数和结果。每个字符串之间有一个空格。每个字符串只会包含“X”和“1”…“9”,其中“X”表示竖式中的空格。保证竖式至少有一个解。

    输出描述: 对于每个测试点,输出一行,表示一共可能的解的个数。

    输入例子: 2 X7 9X 123 X X 4

    输出例子: 1 3

    (样例解释:样例1的解为27+96,样例2的解为1+3,2+2,3+1。)

    我的思路比较简单,因为输入的数不超过三位,因此取两个数,根据两个加数的位数,0~9或者0~99或者0~999,当两个数相加的结果等于给定的结果时就去和两个加数的格式对比,对比符合则输出结果。

    #include <stdio h=""> #include <string h=""> #include <stdlib h=""> void main(int argc,char *argv[]) { //printf("%d\n",strlen(argv[1])); char *a,*b,*c; int lena,lenb,lenc; int result; int timea = 0,timeb = 0; char cpra[5] ,cprb[5]; a=argv[1]; b=argv[2]; c=argv[3]; //printf("%s\n%s\n%s\n",a,b,c); lena = strlen(a); lenb = strlen(b); lenc = strlen(c); printf("%d,%d,%d\n",lena,lenb,lenc); result = atoi(c); printf("result:%d\n",result); for(int i = 0;i<lena;i++) { timea = timea * 10 + 9; } for(int i =0;i<lenb;i++) { timeb = timeb *10 + 9; } //printf("%d,%d",timea,timeb); for(int i = 1; i<=timea;i++) { for(int j = 1; j<= timeb; j++) { if(i+j == result) { //判断是否有符合给定的条件 //printf("%d+%d\n",i,j); sprintf(cpra,"%d",i); sprintf(cprb,"%d",j); //printf("%s+%s\n",cpra,cprb); if(strlen(cpra) == lena && strlen(cprb)==lenb) { //printf("%s+%s\n",cpra,cprb); //printf("%s+%s\n",a,b); for(int k = 0;k<lena;k++) { // printf("k:%d,%c\n",k,a[k]); if(a[k] != 'x' ) { if(cpra[k] != a[k]) goto RET; } } for(int k = 0;k<lenb;k++) { if(b[k] != 'x') { if(cprb[k] != b[k]) goto RET; } } printf("result:%d + %d = %d\n",i,j,result); } RET: memset(cpra,0,strlen(cpra)); memset(cprb,0,strlen(cprb)); } } } } </stdlib></string></stdio>

    转载请注明原文地址: https://ju.6miu.com/read-39264.html

    最新回复(0)