SGU 107: 987654321 problem
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=107
题目大意:
求出多少个N位数的平方末尾是987654321。
解题思路:
因为末尾多少是跟后几位相乘有关的,所以先试探一些值,9位以下都没有解,9位有8个,10位有8*9个,递推下去11位以上就是8*9*(n-10)个。因为n的范围是10^6,所以用公式不能算,会溢出,这里用了一个小技巧,因为后面都是0,所以算10位后面就直接输出输出72然后加上(n-10)个0。
解题代码:
#include<iostream> using namespace std; int main(){ int n; cin>>n; if(n<9) cout<<0<<endl; else if(n==9) cout<<8<<endl; else if(n==10) cout<<72<<endl; else{ cout<<72; for(int i=1;i<=n-10;i++) cout<<0; cout<<endl; } return 0; }
扩展知识:http://blog.csdn.net/ZERO2046/archive/2007/05/20/1618507.aspx
SGU 135: Drawing Lines
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=135
题目大意:
n条直线能把平面分成最多几个空间。
解题思路:
可以推出f(n)=f(n-1)+n;然后扩展得到.
解题代码:
#include<iostream> using namespace std; int main(){ long long n; cin>>n; cout<<(n*(n+1)/2+1)<<endl; return 0; }
扩展知识:http://mathworld.wolfram.com/CircleDivisionbyLines.html
SGU 105: Div 3
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=105
题目大意:
有一个数列1,12,123,1234,...,12345678910,1234567891011,...,求第N个数前有几个数能被3整除包括N.
解题思路:
能被3整除的数的特点是各个位上的和加起来能被3整除,看规律可知每3个数中有一个数不能被3整除,那个数就是序数跟3取模是1的那个数。
解题代码:
#include<iostream> #include<stdio.h> using namespace std; int main(){ long long n,t,m; while(cin>>n){ m=n/3*2; if(n%3!=0){ t=n%3-1; m+=t; } cout<<m<<endl; } return 0; }