I asked the programmer goddess for her QQ number, but...

I asked the programmer goddess for her QQ number, but...

introduction

A beautiful programmer came to our team, and I was secretly delighted. Haha, this is my chance. I was thinking how to start? Well, I'll start with the QQ number. I'll find the goddess and get her QQ number. Haha, I'm such a genius~~~

It's like this

The idea is beautiful, but the reality is cruel. When I asked the goddess for her QQ number, I didn't expect that the goddess didn't give it to me directly, but gave me a question (it's really a programmer's competition~~ ~). If I can't solve the problem, not only will I lose the opportunity to contact the goddess, but even the basic skill for survival - programming ability will be questioned~~~ The question is this:
Given a string of numbers (not a QQ number), you can find out the QQ number according to the following rules: first delete the first number, then put the second number at the end of the string, then delete the third number, and put the fourth number at the end of the string... repeat this process until there is only one number left, delete the first number as well, and connect these numbers together in the order you just deleted to get the goddess's QQ number.

[[137432]]

That's it. The goddess gave a string of numbers 631758924. Now what we need to do is to find the goddess' QQ number from this number. There are many ways to do it. For example, you can use 9 cards to write these 9 numbers respectively, simulate the process of the question, and calculate it, or you can use a pen to calculate one by one~~~~

These methods are too low-level and do not show the ability of programmers. It is cooler to write a program (actually, I am thinking that if I meet a goddess who asks such a question next time, the program will be very convenient, haha~~~)

Solution

The first method uses mathematical methods. According to the rules of the question, loop the following operations: round up => remainder => remainder*10+round up. ... The objects of the remainder and round up are all multiples of 10. Depending on the number of digits, each rounding results in a single digit. Loop until the number is equal to 0.

  1. <?php
  2. $raw_num = 631758924;
  3. $num = 0;
  4. $devisor = 1;
  5. while ( $devisor < $raw_num )
  6. {
  7.      $devisor *= 10; //Get the smallest integer that is a multiple of 10 greater than raw_num  
  8. }
  9.  
  10. while ( $raw_num > 0) {
  11.      $devisor /= 10;
  12.      $next = floor ( $raw_num / $devisor ); //Get the next number  
  13.      $num = $num *10 + $next ; //Calculate the "semi-finished product" QQ number  
  14.      $raw_num = $raw_num % $devisor ;
  15.      $last = floor ( $raw_num * 10 / $devisor ); //Move numbers and concatenate the QQ number of the user  
  16.  
  17.      $pre = $raw_num % ( ceil ( $devisor / 10));
  18.  
  19.      $raw_num = $pre * 10 + $last ;
  20. }
  21. echo   "Congratulations, you have successfully obtained the QQ number: {$num}" ; //Congratulations, you have successfully obtained the QQ number: 615947283  

Use the queue's FIFO to obtain the QQ number. According to the characteristics of the question, the queue can be used to process it. The queue is simple, convenient, and easier to understand.

  1. #include < stdio.h >  
  2. struct queue {
  3. int *data;
  4. int head;
  5. int tail;
  6. };
  7. int main()
  8. {
  9. int num, i;
  10. printf("Please output the length of the QQ number to be decrypted: ");
  11. scanf("%d", &num);
  12.       
  13. struct queue q;
  14.      q.data = (int *)malloc(sizeof(int)*(num*2-1)); //The total required array length is num*2-1
  15.      q.head = 0 ;
  16.      q.tail = 0 ;
  17.       
  18. for( i = 1 ;i < = num;i++)
  19. {
  20. scanf("%d", &q.data[q.tail]);
  21. q.tail++;
  22. }
  23.       
  24. printf("Congratulations, you have successfully obtained your QQ number:");
  25. while(q.head <   q.tail )
  26. {
  27. printf("%d", q.data[q.head]);
  28. q.head++;
  29.           
  30. q.data[q.tail] = q.data[q.head];
  31. q.tail++;
  32. q.head++;
  33. }
  34. return 0;
  35. }
  36.  
  37. #The following is an experiment
  38. Please input the length of the QQ number to be decrypted: 9
  39. 6
  40. 3
  41. 1
  42. 7
  43. 5
  44. 8
  45. 9
  46. 2
  47. 4
  48. Congratulations, you have successfully obtained the QQ number: 615947283. Please press any key to continue. . .

Congratulations, you have successfully obtained the QQ number: 615947283. Please press any key to continue. . .

Say something

The idea for this article comes from Chapter 2, Section 1 [Decrypting QQ Numbers — Queues] in Aha! Algorithms, and the only illustration is also taken from this book.

------------------------------------Dividing line------------------------------------

The js of @朱影 on the 21st floor uses array push and shift, which is also good (slightly modified), "push first and then shift":

  1. var n = "631758924" ;
  2. var arr = [];
  3. var res = [];
  4.  
  5. for ( var i=0; i<n.length; i++) {
  6. arr.push(n.charAt(i));
  7. }
  8.  
  9. while (arr.length) {
  10.      if (arr.length !== 1) {
  11. res.push( arr.shift() );
  12. arr.push( arr.shift() );
  13. } else {
  14. res.push( arr.shift() );
  15. }
  16. }
  17. console.log(res.join( '' )); //615947283  

<<:  10 Steps to Becoming a Professional iOS Developer — From Scratch

>>:  Make your PHP 7 faster (GCC PGO)

Recommend

How to analyze retention data and reduce user churn?

As we enter the second half of the Internet era, ...

The iron flowers are so beautiful, will it burn the craftsman who made them?

Review expert: Zhu Guangsi, member of Beijing Sci...

Cai Wensheng, Chairman of Meitu: Meitu's past, present and future

Someone once commented on Cai Wensheng: "He ...

18 details of Baidu's ocpc launch (Part 2)

Continuing from the previous article "18 det...

Special: How magical is the Chishui River?

On the land of China Among thousands of rivers Ch...

Why did Facebook abandon its DSP bidding product?

Facebook unexpectedly decided to remove this key ...

Is it easier to gain weight in summer? 8 ways to stay away from fat

A woman called me and asked me: Other people gain...

Is drinking soup really unnutritious?

A few days ago, a nutritionist on a health progra...