本文主要是介绍hdu1407 测试你是否和LTC水平一样高(数学:打表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
受之前做的几道题影响,第一反应就是打表
但我之前打表是三重循环从小到大遍历,这样就很有问题了
比如输入201,对应结果应该为1, 2, 14
但我的方法输出结果为4, 8, 11
很难设置判别条件使得输出结果最小
于是想到了从大到小遍历
但是用打表这个题有问题,就是给的数据并不在10000以内
我开数组开到17000还是错
开到20000才过,用时0ms
代码如下:
#include <stdio.h>
#define MAXN 20001
struct Num{int p, q, r;
}a[MAXN+10];int main(void) {int i, j, k, n, t;for(i=100; i>0; --i) {for(j=100; j>=i; --j) {for(k=100; k>=j; --k) {t = i*i+j*j+k*k;if(t >= MAXN)break;a[t].p = i;a[t].q = j;a[t].r = k;}}}while(scanf("%d", &n) != EOF) {printf("%d %d %d\n", a[n].p, a[n].q, a[n].r);}return 0;
}
这篇关于hdu1407 测试你是否和LTC水平一样高(数学:打表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!