比赛题目是这样的:
yeah,现场出题,现场coding,现场评奖,现场颁奖。
So,想来现场参加火热决赛直取ipad Air的,请先通过线上初赛题目带通配符的数:
给定一个带通配符问号的数W,问号可以代表任意一个一位数字。
再给定一个整数X,和W具有同样的长度。
问有多少个整数符合W的形式并且比X大?
输入格式
多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.
输出格式
每行一个整数表示结果。
答题说明:
输入样例
36?1?8
236428
8?3
910
?
5
输出样例
100
0
4
友情提醒:
1、本题用OJ模式答题,答题时可把下面输入框内预留的函数全部直接去掉,自己另起函数名实现本题功能。
2、因为本系统的OJ模式对于Java 和 C# 的支持有问题,所以本题暂不支持这两种语言挑战。
/
更新:答题页面提交了n次代码也没有反应,换浏览器也没用。
算了,一个小比赛而已,不参加也罢。
/
题目中有说要输入多组数据,每组数据两行。要实现的话可以创建一个链表保存输入的所有数据。但题中没有限定输入数据数量。要不要设定最大输入范围呢?
还是不用链表了先,直接返回一组数据的结果吧。
分析了一下后写出如下代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXLENGTH 10
// 检测问号数量函数
// 返回值:字符串中问号数量
int check(char *string){
int count = 0;
for(int i = 0; i < 10; i++){
if(string[i] == '?'){
count++;
}
}
return (count);
}
// 确定字符串有效长度
// 返回值:字符串有效长度
int strlength(char *string){
int root = 0;
for(int i = 0;;i++){
if(string[i] == 0){
break;
}
root += 1;
}
return root;
}
// 确定问号位置函数
// 参数:字符串地址,字符串长度
// 返回值:输入 输出
// 36?1?? 310
int decided(char *string, int charsNum){
int save = 0;
for(int i = 0, j = charsNum - 1; i < charsNum; i++, j--){
if(string[i] == '?'){
save *= 10;
save += j;
}
}
return save;
}
// 字符串转换为整数,同时将问号变为0
int translate(char *string){
for(int i = 0; i < MAXLENGTH; i++){
if(string[i] == '?'){
string[i] = '0';
}
}
return (atoi(string));
}
// 生成运算数字
// 参数:问号数量,问号位置,基数
int create(int questionMark, int questionMarkSet, int count){
int qms = questionMarkSet; // 问号位置
int ct = count; // 基数
int root = 0;
for(int i = 0; i < questionMark; i++){
root += ((int)pow(10, qms % 10) * (ct % 10));
qms /= 10;
ct /= 10;
}
return root;
}
//测试问题函数
int testfunc(char *W, char *X){
int questionMark = check(W);// 问号数量
int questionMarkSet = decided(W, strlength(W)); // 确定问号位置
int getX = atoi(X);
int getW = translate(W);
int checkW = 0; // 存放W-X的值
for(int i = 1; i <= (int)pow(10, questionMark); i++){
if((create(questionMark, questionMarkSet, i) + getW) > getX){
checkW += 1;
}
};
return checkW;
}
int main(){
char W[MAXLENGTH] = "0";
char X[MAXLENGTH] = "0";
while(1){
scanf("%s", W);
scanf("%s", X);
printf("%d", testfunc(W, X));
}
}