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 \n",&a); scanf("%s \n",&b); scanf("%s \n",&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; }