- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n < 100)的与7无关的正整数的平方和.
- 输入
- 输入为一行,正整数n(n < 100)
- 输出
- 输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。
- 样例输入
-
21
- 样例输出
-
2336
- 来源
- 计算概论05
代碼實現:
1 #include<cstdio> 2 int n,ans; 3 int main(){ 4 scanf("%d",&n); 5 for(int i=1;i<=n;i++){ 6 if(i%7==0) continue; 7 if(i%10==7) continue; 8 if(i/10==7) continue; 9 ans+=i*i; 10 } 11 printf("%d ",ans); 12 return 0; 13 }
题目来源:OpenJudge-NOI
一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数。求所有小于等于N的与7无关的正整数的平方和。
例如:N = 8,<= 8与7无关的数包括:1 2 3 4 5 6 8,平方和为:155。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000) 第2 - T + 1行:每行1个数N。(1 <= N <= 10^6)
Output
共T行,每行一个数,对应T个测试的计算结果。
Input示例
5 4 5 6 7 8
Output示例
30 55 91 91 155
C++的运行时限为:1000 ms ,空间限制为:131072 KB
先打表。
代码实现:
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const long long maxn=1000010; 5 long long t,n,a; 6 long long ans[maxn]; 7 bool p; 8 int main(){ 9 for(long long i=1;i<=maxn;i++){ 10 a=i;p=0;ans[i]=ans[i-1]; 11 if(a%7==0) p=1; 12 while(a){ 13 if(p) break; 14 if(a%10==7) p=1; 15 a/=10; 16 } 17 if(!p) ans[i]+=i*i; 18 } 19 cin>>t; 20 for(long long i=1;i<=t;i++){ 21 cin>>n; 22 cout<<ans[n]<<endl; 23 } 24 return 0; 25 }
题目来源:51Nod