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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | hii guys this is logic for spoj Divisor Digits problem............. 1.every no is divisble by 1 2.Any no is divisible by 2 if its last digit is divisible by 2 3.Any no is divisible by 3 if its sum of digit is divisible by 3 4.Any no is divisible by 4 if number formed by its last two digits is divisible by 4 5.Any no is divisible by 5 if its last digit is divisible by 5 i.e its last digit either 0 or 5 6.Any no is divisible by 6 if the no is divisible by 2 and 3 8.Any no is divisible by 8 if number formed by last three digit is divisible by 8 9.Any no is divisible by 9 if sum of digits is divisible by 9 The only issue is how to check for 7... so there is a very good concept for 7........ I am declareing an array int a[]={1,3,2,-1,-3,-2}; letsay i want to check for str[]="73089089"; its len=8; start from Rightmost digit upto leftmost digit and just find out the sum as follows....... int sum=0,k=0; for(int i=len-1;i>=0;i--) { sum+=(str[i]-' 0')*(a[k]); k=(k+1)%6; } after this you have to check if(sum%7==0) then number is divisible by 7 else not I HOPE YOU GOT THE LOGIC............ my AC solution is......... #include <cstdio> #include <cstring> int main() { int len,count,sum,num,num2,i; int array[] = {1,3,2,-1,-3,-2}; int yes; char str[245],chr; while(scanf("%s",str) != EOF) { len = strlen(str); for(i = 0,count = 0,sum = 0,num = 0,num2 = 0,yes = 0; i < len; i++) { chr = str[i]; if(chr == '0') { continue; } else if(chr == '1') { count++; } else if(chr == '2') { if((str[len-1]-48)%2 == 0) count++; } else if(chr == '3') { if(sum == 0) { for(int j = 0; j < len; j++) { sum += (str[j] - 48); } } if(sum % 3 == 0) count ++; } else if(chr == '4') { if(num == 0) { num = 10*(str[len-2] - 48) + (str[len-1] - 48); } if(num%4 == 0) count++; } else if(chr == '5') { if((str[len-1]-48)%5 == 0) count++; } else if(chr == '6') { if(sum == 0) { for(int j = 0; j < len; j++) { sum += (str[j] - 48); } } if(sum%3 == 0 && (str[len-1]-48)%2 == 0) count++; } else if(chr == '7') { if(yes == 1) count++; else if(yes == -1) continue; else { int numk,k = 0,nsum = 0; for(int j = len-1; j >=0 ; j--) { numk = str[j] - 48; nsum += array[k]*numk; k = (k+1)%6; } if(nsum% 7 == 0) { count++; yes = 1; } else yes = -1; } } else if(chr == '8') { if(num2 == 0) { num2 = 100*(str[len-3]-48) + 10*(str[len-2]-48) + str[len-1]-48; } if(num2%8 == 0) count++; } else if(chr == '9') { if(sum == 0) { for(int j = 0; j < len; j++) { sum += (str[j] - 48); } } if(sum % 9 == 0) count++; } } printf("%d\n",count); } } |
Translate
Sunday, 18 January 2015
spoj PUCMM025 solution
Subscribe to:
Post Comments (Atom)
-
HII guys this is totally geometry based problem there is nothing to code just use formula LOGIC::how to find centroid of a polygon u c...
No comments:
Post a Comment