本文主要是介绍英雄会第四届在线编程大赛·线上初赛:带通配符的数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
输入格式
多组数据,每组数据两行,第一行是W,第二行是X,它们长度相同。在[1..10]之间.
输出格式
每行一个整数表示结果。
输入样例
36?1?8
236428
8?3
910
?
5
输出样例
100
0
4
#include <stdio.h>
#include<iostream>
#include <string>
#define NUM 100
using namespace std;
int before(int i,int index) ;
int index(int i);
int dataResult();
int One(int i);
int dataOutput();
int dataInput();
int checkData(int i);
int checkLength(int i);
char data[NUM][11];
int num;
int result[NUM];
int main(int argc,char*argv[])
{
printf("请输入要输入数据对的个数");
scanf("%d",&num);
num*=2;
//printf("%d\n",num);
dataInput();
dataOutput();
dataResult();
return 0;
}
int checkData(int i)
{
if(0 == i%2)
{
for(int j=0;j<strlen(data[i]);j++)
{
if (data[i][j]!='?'&&!(data[i][j]>='0'&&data[i][j]<='9'))
{
printf("输入的数据只能包括?和数字,此次输入不符合规则,请再次输入\n");
return i-1;
}
}
}
else
{
for(int j=0;j<strlen(data[i]);j++)
{
if (!(data[i][j]>='0'&&data[i][j]<='9'))
{
printf("此次输入只能包括数字,输入不符合规则,请再次输入\n");
return i-1;
}
}
}
return i;
}
int checkLength(int i)
{
if(0 == strlen(data[i]))
{
printf("此次未输入的数据,请再次输入。\n");
return i-1;
}
if(strlen(data[i])>10)
{
printf("此次输入的数大于10位,请再次输入:\n");
strcpy(data[i],"");
return i-1;
}
if(0 != i%2)
{
if(strlen(data[i-1])!=strlen(data[i]))
{
strcpy(data[i],"");
strcpy(data[i-1],"");
printf("和前一次输入的数据长度不一致,请再输如两组数据。\n");
return i-2;
}
}
return i;
}
int dataInput()
{
printf("请输入数据,以回车结束\n");
for(int i=0;i<num;i++)
{
fflush(stdin);
gets(data[i]);
i = checkLength(i);
i = checkData(i);
// printf("strlen(data[i])=%d\n",strlen(data[i]));
}
return 1;
};
int dataOutput()
{
puts("/t*************输入的数据***********************");
for(int i=0;i<num;i++)
{
puts(data[i]);
}
puts("/t*************输入的数据***********************");
return 1;
};
int One(int i)
{
int k = 0,sum=0;
for(int j=0;j<strlen(data[i]);j++)
{
if ('?'==data[i][j])
{
k++;
sum=sum*10+(data[i+1][j]-'0');
}
}
if(before(i,index(i))>before(i+1,index(i)))
{
return (int)pow(10.0,k);
}
else if(before(i,index(i))==before(i+1,index(i)))
{
return (int)pow(10.0,k)-1-sum;
}
else
{
return 0;
}
}
int dataResult()
{
int sum = 0;
for(int i=0;i<num;i+=2)
{
if(0 == i%2)
{
result[i/2] = One(i);
}
printf("%d\n",result[i/2]);
}
return 1;
};
int index(int i)
{
for(int j=0;j<strlen(data[i]);j++)
{
if ('?'==data[i][j])
{
return j;
}
}
return strlen(data[i]);
}
int before(int i,int index)
{
int sum =0;
for(int j=0;j<index;j++)
{
sum+=(int)pow((float)(data[i][j]-'0'),index-1-j);
}
return sum;
}
这篇关于英雄会第四届在线编程大赛·线上初赛:带通配符的数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!