1017 函数题
题意:先输入一个数N然后会分N块输入,每块每次输入2个数,n,m,n=m=0时结束,当a和b满足0<a<b<n且使(a^2+b^2 +m)/(ab) 的值为整数时,那么这对a和b就是一组,输出这样的组数。
解析:题目挺难理解的,一定要读懂题目,再按照题目编写函数就行。
#include<iostream>
using namespace std;int main(){
int n,m,cont=0,num=0;
int T;
cin>>T;
while(T--)
{
while(cin>>n>>m&&n!=0)
{
int a,b;
for(a=1;a<100;++a){
for(b=a+1;b<n;++b){
if((a*a+b*b+m)%(a*b)==0)
cont++;
}
}
cout<<"Case "<<++num<<": "<<cont<<endl;
cont=0;
}
num=0;
if(T)
cout<<endl;
}
}
1018 求大数
解析:求大数的阶乘,根据公式:log(n!)=(int)(log10(1)+log10(2)+log10(3)+......+log10(n))
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
double sum=log10(double(n));
while(--n)
sum+=log10(double(n));
cout<<int(sum)+1<<endl;
}
}
1019 求最小公倍数
解析:利用辗转相除法求出最大公约数n, a,b 的最小公倍数为a*b/n.
#include<iostream>
#include<math.h>
#define N 1000
using namespace std;
int GCD(int a,int b)
{
return !(b)?a:GCD(b,a%b);
}
int main()
{
int n,k,i,LCM,a;
while(cin>>n)
{
while(n--)
{
cin>>k;
cin>>a;
LCM=a;
for(i=1; i<k; i++)
{
cin>>a;
LCM=LCM/GCD(LCM,a)*a;
}
cout<<LCM<<endl;
}
}
return 0;
}
1020 字符串
题意:统计重复的字符个数.
解析:字符串存在数组中,扫描数组求出重复的字符.
#include<stdio.h>
#include<string.h>
int main(){
int k,a,i,j;
char c[10001];
scanf("%d",&k);
while(k--)
{
scanf("%s",c);
a=strlen(c);
j=1;
for(i=0;i<a;i++)
{
if(c[i]==c[i+1])
j++;
else
{
if(j==1) printf("%c",c[i]);
else printf("%d%c",j,c[i]);
j=1;
}
}
printf("\n");
}
return 0;
}