02/10/2018, 14:59
P167PROD spoj PTIT – ROUND 7D – ABC
Nguồn đề bài: http://www.spoj.com/PTIT/problems/P167PROD/ 1. Đề bài P167PROD spoj Cho đẳng thức a + b = c, trong 3 số này có 1 số bị mờ đi một chữ số (được thay bằng dấu ?), hãy tìm chữ số đó. Input Dòng đầu chứa một số nguyên không âm a; Dòng thứ hai chứa một số nguyên ...
Nguồn đề bài: http://www.spoj.com/PTIT/problems/P167PROD/
1. Đề bài P167PROD spoj
Cho đẳng thức a + b = c, trong 3 số này có 1 số bị mờ đi một chữ số (được thay bằng dấu ?), hãy tìm chữ số đó.
Input
- Dòng đầu chứa một số nguyên không âm a;
- Dòng thứ hai chứa một số nguyên không âm b;
- Dòng thứ ba chứa một số nguyên không âm c;
Cả ba số đều không vượt quá 106. Một trong ba số sẽ bị thay một vị trí bằng dấu ?.
Output
- Gồm một dòng chứa một số chữ số là kết quả tương ứng của bộ test trong dữ liệu vào.
Example
Input:
128
?2
200
Output:
7
2. Code c++ P167PROD spoj PTIT
#include <stdio.h>
#include <string.h>
using namespace std;
int pos(char s[10])
{
int i;
for (i=0; i<strlen(s); i++)
{
if (s[i]=='?') return i;
}
return -1;
}
int strtonum(char s[10])
{
int i,sum=0,mul=1;
for (i=strlen(s)-1; i>=0; i--)
{
sum=sum+(s[i]-48)*mul;
mul=mul*10;
}
return sum;
}
int main()
{
char a[10],c[10],b[10];
scanf("%s
",&a);
scanf("%s
",&b);
scanf("%s
",&c);
int pa=pos(a),pb=pos(b),pc=pos(c),na,nb,nc;
if (pa==-1) na=strtonum(a);
if (pb==-1) nb=strtonum(b);
if (pc==-1) nc=strtonum(c);
int tmp,i;
if (pa!=-1)
{
for (i=0; i<=9; i++)
{
a[pa]=i+48;
tmp=strtonum(a);
if (tmp+nb==nc)
{
printf("%d",i);
return 0;
}
}
}
if (pb!=-1)
{
for (i=0; i<=9; i++)
{
b[pb]=i+48;
tmp=strtonum(b);
if (na+tmp==nc)
{
printf("%d",i);
return 0;
}
}
}
if (pc!=-1)
{
for (i=0; i<=9; i++)
{
c[pc]=i+48;
tmp=strtonum(c);
if (na+nb==tmp)
{
printf("%d",i);
return 0;
}
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <stdio.h> #include <string.h> using namespace std; int pos(char s[10]) { int i; for (i=0; i<strlen(s); i++) { if (s[i]=='?') return i; } return -1; } int strtonum(char s[10]) { int i,sum=0,mul=1; for (i=strlen(s)-1; i>=0; i--) { sum=sum+(s[i]-48)*mul; mul=mul*10; } return sum; } int main() { char a[10],c[10],b[10]; scanf("%s
",&a); scanf("%s
",&b); scanf("%s
",&c); int pa=pos(a),pb=pos(b),pc=pos(c),na,nb,nc; if (pa==-1) na=strtonum(a); if (pb==-1) nb=strtonum(b); if (pc==-1) nc=strtonum(c); int tmp,i; if (pa!=-1) { for (i=0; i<=9; i++) { a[pa]=i+48; tmp=strtonum(a); if (tmp+nb==nc) { printf("%d",i); return 0; } } } if (pb!=-1) { for (i=0; i<=9; i++) { b[pb]=i+48; tmp=strtonum(b); if (na+tmp==nc) { printf("%d",i); return 0; } } } if (pc!=-1) { for (i=0; i<=9; i++) { c[pc]=i+48; tmp=strtonum(c); if (na+nb==tmp) { printf("%d",i); return 0; } } } return 0; } |