1004.Let the Balloon Rise
#include<stdio.h>
#include<string.h>
int main(void)
{
char color[1001][25];
int max, count[1001], i, j, n, k;
while (scanf("%d", &n) && n != 0)
{
for (i = 0; i < n; i++)
scanf("%s", &color[i]);//把字符串存进数组
for (i = 0; i < n; i++)
count[i] = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (strcmp(color[i], color[j]) == 0)//简单的俩俩比对
count[i]++;//统计出现次数
max = 0, k = 0;
for (i = 0; i < n; i++)//找最大
if (max < count[i])
{
max = count[i];
k = i;
}
printf("%s\n", color[k]);
}
return 0;
}
C语言输入比较字符串
getchar()
C++的vector的用法,动态数组,容器
参考
Time Limit : 2000/1000ms (Java/Other) ,一组测试数据计算加减乘除的次数不能超过10^8
1008.Elevator
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,sum,n=0;
int a[100];
while(scanf("%d",&n)!=0&&n!=0){
a[0]=0;
sum=0;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]>a[i-1]){
sum=sum+(a[i]-a[i-1])*6+5;
}else{
sum=sum+(a[i-1]-a[i])*4+5;
}
}
printf("%d\n",sum);
}
return 0;
}
1009.FatMouse’ Trade
贪心算法:
#include<stdio.h>
#include<stdlib.h>
const int MAXN = 1010;
struct node
{
double j,f;
double r;
}a[MAXN];
int cmp(const void *a,const void *b)//从大到小排序
{
struct node *c=(node *)a;
struct node *d=(node *)b;
if(c->r > d->r) return -1;
else return 1;
}
int main()
{
int N;
double M;
double ans;
while(scanf("%lf%d",&M,&N))
{
if(M==-1&&N==-1) break;
for(int i=0;i<N;i++)
{
scanf("%lf%lf",&a[i].j,&a[i].f);
a[i].r=(double)a[i].j/a[i].f;
}
qsort(a,N,sizeof(a[0]),cmp);
ans=0;
for(int i=0;i<N;i++)
{
if(M>=a[i].f)
{
ans+=a[i].j;
M-=a[i].f;
}
else
{
ans+=(a[i].j/a[i].f)*M;
break;
}
}
printf("%.3lf\n",ans);
}
return 0;
}
1711.Number Sequence
KMP算法:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 1000005
char S[N],T[N];
int nex[N],slen,tlen,a[N],b[N];
void getnext()
{
int i=-1,j=0;
nex[0]=-1;
while(j<tlen)
{
if(i==-1||b[i]==b[j]) nex[++j]=++i;
else i=nex[i];
}
}
int KMP_index()
{
int i=0,j=0;
while(i<slen&&j<tlen)
{
if(j==-1||a[i]==b[j]) {
i++;j++;}
else j=nex[j];
}
if(j==tlen) return i-tlen+1;
return -1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&slen,&tlen);
for(int i=0;i<slen;i++)
scanf("%d",&a[i]);
for(int i=0;i<tlen;i++)
scanf("%d",&b[i]);
memset(nex,0,sizeof(nex));
getnext();
printf("%d\n",KMP_index());
}
return 0;
}
1071.The area
定积分:公式解答
#include<stdio.h>
int main()
{
double x1,x2,x3,y1,y2,y3;
double k,t,a,b,c,s1,s2;
int n;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%lf %lf %lf %lf %lf %lf",&x1,
&y1,&x2,&y2,&x3,&y3);
k=(y3-y2)/(x3-x2);
t=y3-k*x3;
a=(y2-y1)/((x1-x2)*(x1-x2));
b=-2*x1*a;
c=y1-a*x1*x1-b*x1;
s1=1.0/3*a*x2*x2*x2+1.0/2*(b-k)*x2*x2+(c-t)*x2;
s2=1.0/3*a*x3*x3*x3+1.0/2*(b-k)*x3*x3+(c-t)*x3;
printf("%.2f\n",s2-s1);
}
}
return 0;
}
1060.Leftmost Digit
参考
考察数学思维:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int t,n;
double m,dec;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
m=n*log10(n);
dec=m-(long long int)m;//指数的小数部分
printf("%d\n",(int)pow(10.0,dec));//10^dec
}
return 0;
}
1030.Delta-wave
参考2代码:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int a,b;
int aLayer,bLayer;
int aX,aY,bX,bY;
int distance;
while(cin >> a >> b){
aLayer = ceil(sqrt(a));
bLayer = ceil(sqrt(b));
if(aLayer == bLayer)
distance = b - a;
else{
aX = (aLayer * aLayer - a) / 2;
aY = aLayer - (aLayer * aLayer - a + 1) / 2 - 1;
bX = (bLayer * bLayer - b) / 2;
bY = bLayer - (bLayer * bLayer - b + 1) / 2 - 1;
distance = abs(aX - bX) + abs(aY - bY) + abs(aLayer - bLayer);
}
cout << distance << endl;
}
}
1178.Heritage from father
题目解析:
#include<stdio.h>
#include<math.h>
int main()
{
int n, m;
double sum, result;
while(scanf("%d",&n)== 1 && n)
{
sum = 1.0 * n * (n+1) * (n+2) / 6;
m = (int)log10(sum);
result = sum/pow(10,m);
printf("%.2lfE%d\n", result, m);
//printf("%.3e",result);
}
return 0;
}