纠正我在这个C练习中的想法

时间:2013-03-05 17:43:49

标签: c algorithm

练习要求查找1到500中的哪个数字,特定数字的总和,提升到第三个幂等于该特定数字。

例如1 ^ 3 = 1 371使得3 ^ 3 + 7 ^ 3 + 1 ^ 3 = 371

我是如何处理这个问题的:

我在想如果我有一个包含500个插槽的字符串数组,每个插槽包含一个字符串转换的数字,那么我可以用每个插槽的字符串进行数学运算。如果他们符合我将申请的标准,那么将打印该插槽。

我尝试了函数sprintf但没有取得多大成功。在一个循环中,它只是初始化字符串(或者它是数组?3小时后我感到困惑)[0]插槽,让所有其他插槽保持不变。

我不希望你解决这个问题,而不是用我的逻辑来指导我。如果你愿意,请让我添加我所做的代码。

2 个答案:

答案 0 :(得分:4)

始终明确定义算法,以便了解自己在做什么。将其拆分为简单的步骤。像这样:

For each integer i in the interval 1 to 500:
  Check if the condition holds for this i
  If it holds:
    Print i
  else:
    Do nothing

现在您需要定义“检查条件是否适用于此”。我会使用一些模数和除法算术来提取数字,但我会把细节留给你。

请注意,我没有谈论过C或任何其他编程语言。只有当你知道你的算法时,才应该开始考虑实现。

(实际上可能存在与上面给出的算法略有不同的算法,其中每个数字都有一个循环嵌套在彼此内。这个解决方案可能是你可以接受的,但它不会像通用那样)

答案 1 :(得分:2)

for(i=1;i<=500;i++)
{
   //loop for checking each number i
   int sum=0; // to store the sum of cube of digits
   int n=i; //copy of i
   //The below while loops does the task. It extracts a digit from the number and adds its cube to the sum
   // last digit from the number can be seen by taking its remainder by 10 . For eg 35%10=5
   //once we have used this digit make the number shorter by dividing by 10. For eg 35/10 becomes 3 (because of integer divisions)
   while(n>0)
   {
       int rem=n%10; //extract the last digit
       sum+=cube(rem); //cube function raises a number to its cube
       n/=10;  //remove the digit we had extracted earlier from the number
    }
    if(sum==i) //we got the number we wanted
        printf("%d\n",i);

}