本文共 822 字,大约阅读时间需要 2 分钟。
MAX根据题目 n(n+1)/2 = INT_MAX 估计出来的
#include#include #include #include #include #define MAX 66000using namespace std;int k, n;int g, t;long long a[MAX+1];int main() { // freopen("out.txt","w",stdout); memset(a,INT_MAX,sizeof(a)); a[0] = 0; for(int i = 1; i <= MAX; ++i){ a[i] = a[i-1] + i; } scanf("%d",&k); while(k--){ scanf("%d",&n);; g =lower_bound(a+1,a+MAX,n)-a; t = n - a[g-1]; if(t%9 == 0)//注意 对9取余的情况 printf("%d\n",9); else printf("%d\n",t%9); } return 0; }
直接查找会超时TLE:
scanf("%d",&k); while(k--){ int i; scanf("%d",&n); for(i = 1; i <= sqrt(INT_MAX)+1; ++i){ if((1+i)*i/2 >= n){ break; } } int t = n - i*(i-1)/2; if(t%9 == 0) printf("%d\n",9); else printf("%d\n",t%9); }
转载地址:http://dmimi.baihongyu.com/