这也是一道笔试题,具体来源就不多说了,接下来看一下题目:任意一个数,若存在连续的奇数之和等于这个数,则此为这个数的奇数序列,一个数可以有多个奇数序列。现输入任意一个数,求此数奇数序列的个数。举个列子:输入16,存在(1+3+5+7)= 16,(7+9) = 16;则输出2;输入12,存在(5+7)=12,输出为1;输入17,不存在奇数序列,输出0.
以下是我当时写的代码,但是那个编译环境一直出现段错误,我单独拿到ubuntu种运行没有错误,希望大家和我一起看看给点建议,代码奉上:
#include <stdio.h>
int Calc(int nNum ) {
int arr[32] = {0};
int sum = 0,i = 0,j = 0,count = 0;//sum保存奇数序列的和,count保存奇数序列个数
if(nNum/2 % 2 != 0){ //如果输入的数是奇数或者偶数被2整除后为奇数,奇数序列都无。
return count;
}
for(i = 1;i <= nNum/2;i++){//将1到输入数的所有奇数按顺序存储到数组arr中
arr[i-1] = 2*i-1;
}
for(i = 0;i < nNum/2;i++){
sum = arr[i];//第一层循环,先将sum赋值为每次奇数序列的第一个奇数
for(j = i+1;j < nNum/2;j++){//第二层循环,从第一个奇数开始向后连续加
sum += arr[j];
if(sum == nNum){//直到sum和nNum相等,得到一个奇数序列,count++;退出开始下一次循环。
count++;
break;
}
}
}
return count;
}
int main(int argc, char *argv[])
{
int nNum;
scanf("%d",&nNum);
int count = Calc(nNum);
printf("%d\n",count);
return 0;
}