A:小 I 的小姐姐
#include<stdio.h>
struct node
{
int w1,w2,w3;
}a[5000];
int main()
{
int n,i,t;
double x,b[5000];
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d %d %d",&a[i].w1,&a[i].w2,&a[i].w3);
b[i]=a[i].w1*0.7+a[i].w2*0.2+a[i].w3*0.1;
}
x=b[0];
t=0;
for(i=1;i<n;i++)
{
if(b[i]>x)
{
x=b[i];
t=i;
}}
printf("%d\n",t);
}
return 0;
}
B:寻找关键点
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}lb;
int n;
void creat(lb *head,int n)
{
lb *p,*q;
int i;
p = head;
for(i=0;i<n;i++)
{
q = (lb*)malloc(sizeof(lb));
scanf("%d",&q->data);
q->next = p->next;
p->next = q;
p = q;
}
}
void show(lb *head)
{
lb *p;
p = head->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
void find(lb *head,int n)
{
int m;
m = n / 2;
lb *p;
p = head->next;
while(m--)
p = p->next;
printf("%d\n",p->data);
}
void del(lb *head)
{
int a,b,f1,f2;
f1 = f2 = 0;
lb *p,*q;
p = head;
scanf("%d%d",&a,&b);
while(p->next)
{
q = p->next;
if(q->data==a||q->data==b)
{
n--;
if(q->data==a)
f1 = 1;
else
f2 = 1;
p->next = q->next;
free(q);
}
else
p = q;
if(f1&&f2)
break;
}
}
void insert(lb *head)
{
int a,b,f1,f2;
f1 = f2 = 0;
lb *p,*q;
p = head->next;
scanf("%d%d",&a,&b);
while(p)
{
if(p->data==1||p->data==2)
{
n++;
if(p->data==1)
{
f1 = 1;
q = (lb*)malloc(sizeof(lb));
q->data = a;
q->next = p->next;
p->next = q;
}
else
{
f2 = 1;
q = (lb*)malloc(sizeof(lb));
q->data = b;
q->next = p->next;
p->next = q;
}
}
if(f1&&f2)
break;
p = p->next;
}
}
int main()
{
lb *head;
int i,m,a;
head = (lb*)malloc(sizeof(lb));
head->next = NULL;
scanf("%d",&n);
creat(head,n);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&a);
if(a==1)
{
del(head);
}
else if(a==2)
{
insert(head);
}
//show(head);
find(head,n);
}
return 0;
}
C:骨牌铺方格II
#include <stdio.h>
int main()
{
int n , i , j ,k ;
long long int f[1001];
while(~scanf("%d" , &n))
{
f[1] = 1;
f[2] = 1;
f[3] = 2;
f[4] = 3;
for (i = 5 ; i <= n ; i++)
{
f[i] = f[i-1] + f[i-3];
}
printf("%lld\n" , f[n]);
}
return 0;
}
D:小 I 买不到票
#include <stdio.h>
#include <stdlib.h>
int main()
{
int r[15],x[15];
int i,n,max,a,min,b;
n = 13;
while(scanf("%d",&r[0])!=EOF)
{
for(i=1;i<n;i++)
scanf("%d",&r[i]);
for(i=0;i<n;i++)
scanf("%d",&x[i]);
max = 0;
min = 1000;
b = 0;
for(i=0;i<12;i++)
{
a = r[i]+r[i+1];
if(a<=100&&x[i]>=max)
{
if(x[i]>max)
{
max = x[i];
b = i + 8;
min = a;
}
else
{
if(x[i] == max&&a<min)
{
b = i + 8;
min = a;
}
}
}
}
if(b)
printf("%d\n",b);
else
printf("-1\n");
}
return 0;
}
E:田忌赛马
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int N;
int a[60000],b[60000];
int i,j;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&a[i]);
}
for(j=1;j<=N;j++)
{
scanf("%d",&b[j]);
}
int cnt=1,count=1;
int num=0;
while(cnt<=N)
{
if(b[count]>a[cnt++])
{
num++;
count++;
}
}
printf("%d\n",num);
return 0;
}
F:动态lcm
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
int a[10][10],m,n,min;
int find(int a,int b)
{
int i,t,q;
t = min(a,b);
for(i=1;i<=t;i++)
{
if(a%i==0&&b%i==0)
q = i;
}
return a / q * b;
}
void walk(int i,int j,int sum)
{
sum = find(sum,a[i][j]);
if(i==n-1&&j==m-1)
{
if(sum<min)
min = sum;
return;
}
if(i<n-1)
walk(i+1,j,sum);
if(j<m-1)
walk(i,j+1,sum);
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
min = 46;
for(i=47;i<=50;i++)
min = find(min,i);
min ++;
walk(0,0,1);
printf("%d\n",min);
return 0;
}
G: Dragon Quest
#include<bits/stdc++.h>
using namespace std;
int h1,a1,d1,h2,a2,d2,ans;
void f2(int h,int a,int d,int bh,int step);
void f1(int h,int a,int d,int bh,int step)
{
if(step>5)return;
if(h<=0)return;
int s=max(0,a-d2);
f2(h,a,d,bh-s,step);
f2(h,a+5,d,bh,step);
f2(h,a,d+5,bh,step);
}
void f2(int h,int a,int d,int bh,int step)
{
if(bh<=0)
{
ans++;
return;
}
int s=a2-d;
f1(h-s,a,d,bh,step+1);
}
int main()
{
while(cin>>h1>>a1>>d1>>h2>>a2>>d2)
{
ans=0;
f1(h1,a1,d1,h2,1);
cout<<ans<<endl;
}
}