核心解法if( abs(v[k - 1] - n) abs(v[k] - n) )就找到了离给定数据最近的斐波拉契数 v[k - 1]因为斐波拉契数列 0 1 1……这有两个数字一样所以比较要从第三项和第四项开始比较又因为数组是从 0 开始计数所以相当于从第二项和第三项开始比较。#includebits/stdc.h using namespace std; int main() { int n, k 3; cin n; vectorint v(10000); v[1] 1; v[2] 1; while(1) { v[k] v[k - 1] v[k - 2]; if( abs(v[k - 1] - n) abs(v[k] - n) ) { cout v[k - 1] endl; return 0; } else k ; } }