Before seeing the solution make sure that you tried enough. Don’t paste the whole code, just find out the logic. If you stuck in trouble, just inform me on comment.
/**Bismillahir Rahmanir Rahim.**/ #include <stdio.h> int main() { int a,b,c,d,e,f,g,h,i,j,k,l,m,n; scanf("%d", &a); for(b=1; b<=a; b++) { scanf("%d%d", &c, &d); e=(c/3)*2; f=c%3; if(f==2) e+=1; i=(d/3)*2; j=d%3; if(j==2) i+=1; m=i-e; m+=1; if(f==1) m-=1; printf("Case %d: %d\n",b,m); } return 0; }
I cant get this "e=(c/3)*2". Would you plz explain!
ReplyDeleteYes,,i also want to know the reason of (c/3)*2;
ReplyDeletefact.
Write down the numbers up to 10,you can see there is a pattern among the numbers.Among 3 numbers,2 is always divisible by 3.So if you have 9 numbers,you can create 3 sets(9/3=3).Now each set have 2 numbers that are divisible by 3.For 3 sets,the total numbers that would be divisible by 3 would be 6(3*2).
DeleteI didn't understand anything . Can u please explain the whole code ?
ReplyDeleteSeries: 1,12,123,1234,12345,123456......
Deletein this code it applied a technique. The technique is find all divisible number by 3. from 0 to d and remove them from 0 to c-1 all divisible number by 3.
Now if you close look at the number of series, you will find that for each 3 numbers there is 2 numbers whose are divisible by 3. [e=(c/3)*2] by this line assigned total number of divisible up to c. now if we get reminder 2 that's mean there missed one divisible number. So that is added next line. Same technique is applied for the d(upper bound). Then it removed from ) to c-1 all divisible number as I mentioned before. But if(f==1) then the it adds extra number so it needs to remove.