版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LMengi000/article/details/82954412
总结:前两个题目做的很顺畅,但是到了第三个与第四个题目,做起来就有一些吃力,虽然能明白题意,但是不能用编程语言表达出来,而且都是数学题目,有些题目需要找规律,做题时对这两个题目没有思路。
A - Programming Education
水题不解释
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
int n,a,b;
scanf("%d",&n);
if(n==1)
printf("Hello World\n");
else
{
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
return 0;
}
B - Time Limit Exceeded
回家有N条路线,每一条路线都有一个所需要的时间 t 与花费 c,让我们在规定时间内回到家并且所花费用最小。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1010;
struct Node
{
int c,t,value;
}num[maxn];
bool compare(Node a, Node b)
{
return a.c<b.c;
}
int main()
{
int n,p;
scanf("%d%d",&n,&p);
for(int i=0;i<n;i++)
{
scanf("%d%d",&num[i].c,&num[i].t);
}
sort(num,num+n,compare);
for(int i=0;i<n;i++)
{
if(num[i].t<=p)
{
printf("%d\n",num[i].c);
break;
}
if(i==n-1 && num[i].t>p)
{
printf("TLE\n");
}
}
return 0;
}
C - Pyramid
通过给出的金字塔的许多小坐标和高度h,通过解线性方程来求出中心坐标点和高度H,
对应的公式:H -( x - Cx )-( y - Cy )= h 其中x y h是题目中给出的,让我们通过公式来求出Cx、Cy、H
目前没思路。
/*#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int X[110],Y[110],H[110];
int G[110][110];
int main()
{
int N;
cin >> N;
for(int x = 0 ; x <= 100 ; x++)
{
for(int y = 0 ; y <= 100 ; y++)
{
G[x][y] = -1;
}
}
for(int i = 0 ;i < N ; i++)
{
cin >> X[i] >> Y[i] >> H[i];
G[X[i]][Y[i]] = H[i];
}
int ansx,ansy,ansh;
for(int x = 0 ; x <= 100 ; x++)
{
for(int y = 0 ; y <= 100 ; y++)
{
if(G[x][y] == 0){
continue;
}
int h,ans = 0;
//
bool can = true;
for(int i = 0 ; i < N ; i++)
{
if(H[i] == 0)continue;
if(ans == 0){
ans = H[i] + abs(x-X[i]) + abs(y-Y[i]);
}
h = H[i] + abs(x-X[i]) + abs(y-Y[i]);
if(h!=ans)
{
can = false;
}
}
if(can)
{
for(int i = 0 ; i < N ; i++)
{
if(H[i] == 0)
{
if(h-abs(X[i]-x)-abs(Y[i]-y)>0)
{
can = false;
}
}
}
}
if(can)
{
ansx = x;
ansy = y;
ansh = h;
}
}
}
cout<<ansx<<" "<<ansy<<" "<<ansh<<endl;
return 0;
}*/
放一个小伙伴的代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=110;
struct{
int x,y,h;
}mes[maxn];
int main(){
int n;
scanf("%d",&n);
int a;
for(int i=0;i<n;i++){
scanf("%d%d%d",&mes[i].x,&mes[i].y,&mes[i].h);
if(mes[i].h>0) a=i;
}
int H,ans;
bool flag;
for(int cx=0;cx<=100;cx++){
for(int cy=0;cy<=100;cy++){
flag=true;
H=abs(mes[a].x-cx)+abs(mes[a].y-cy)+mes[a].h;
for(int i=0;i<n;i++){
ans=max((H-abs(mes[i].x-cx)-abs(mes[i].y-cy)),0);
if(ans!=mes[i].h){
flag=false;
break;
}
}
if(flag){
printf("%d %d %d\n",cx,cy,H);
return 0;
}
}
}
return 0;
}
D - Partition
n代表数字的个数,m代表这n个数字之和,给出n和m
来求这n个数字的最大公约数,并且这n个数字之和为m
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <string>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main(){
int n, m;
scanf("%d%d",&n,&m);
int q = m/n;
int r = m%n;
// printf("q=%d r=%d\n",q,r);
for ( int i = q ; i >= 1 ; i-- )
if ( m%i == 0 ){
printf("%d\n",i);
return 0;
}
return 0;
}