C语言编程时没思路,c语言编程问题

#include

#include

#include

//** 声明结构

//** @result 返回对称数数组

//** @length 数组的长度

struct Symmetrical {

int *result;

int length;

};

typedef struct Symmetrical Symmetrical;

Symmetrical *findSymmetrical() {

//为结果分配内存,最大可能为所有数都是对称数,即 sizeof(int)*1993

int *result = (int *)malloc(sizeof(int)*1993);

int length = 0;

//数字转换为字符串后存放的数组

char *numStr = (char *)malloc(sizeof(char)*4);

for (int i = 1; i <= 1993; i++) {

//如果小于10,一定为对称数

if (i < 10) result[length++] = i;

else {

int is_symmetrical = 1;

// 转换数字到字符串,itoa是非标准函数,可以用sprintf代替

sprintf(numStr, "%d", i);

// itoa(i, numStr, 10);

int num_length = strlen(numStr);

//对每一位进行对比

for (int j = 0; j < num_length / 2; j++) {

//如果正数第j位和倒数第j位不一样,则不为对称数,结束循环

if (numStr[j] != numStr[num_length - j - 1]) {

is_symmetrical = 0;

break;

}

}

//如果是对称数,存到结果数组里

if (is_symmetrical) result[length++] = i;

}

}

free(numStr);

//创建对称数结构,用于同时传递数组和数组长度

Symmetrical *symmetrical = (Symmetrical *)malloc(sizeof(Symmetrical));

symmetrical->result = result;

symmetrical->length = length;

return symmetrical;

}

int main() {

Symmetrical *result = findSymmetrical();

//打印

for (int i = 0; i < result->length; i++) {

printf("%d ", result->result[i]);

}

free(result->result);

free(result);

}

答案非最优解,但思路是这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值