您的位置:首页 > 其它

第一类——模拟题

2010-01-30 16:34 323 查看
做了这么久才弄完第一类的题目,不是很难,相反是比较容易的一类题目。就怪自己太赖了,老是想着偷偷看电视。以后可不能这样了。虽说把PPS卸载掉不是什么绝对有用的措施,但也可以暂时缓和一下。下面是我自己做的代码,除了火星A+B以外,都被AC了。总结:思维比较混乱,有时候想法太多,想得也太复杂了。总觉得别人做的答案真是恰到好处,多一行不多,少一行不少。就和做菜下作料一样,得好好修炼才行....

2005年 A+B(http://acm.hdu.edu.cn/showproblem.php?pid=1228

#include<iostream>
#include<stdio.h>
using namespace std;

char chkey[10][10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};

int ChangeAtoD(char str[])
{
int i;
for(i=0;i<=9;i++)
{
if(strcmp(str,chkey[i]) == 0)
return i;
}
return -1;
}

int main()
{
char inch[10];
int a,b;

while(true)
{
a = 0;
while(scanf("%s",inch)&&(strcmp(inch,"+") != 0))
a = a*10 + ChangeAtoD(inch);
b = 0;
while(scanf("%s",inch)&&(strcmp(inch,"=") != 0))
b = b*10 + ChangeAtoD(inch);

if((a==0)&&(b==0))break;

printf("%d/n",a+b);
}

return 0;
}


2006年 还是A+B(http://acm.hdu.edu.cn/showproblem.php?pid=1229)
#include<iostream>
#include<stdio.h>
using namespace std;

int getK(int n,int k)
{
int i=1,j=0;

while(k--)
i*=10;

j = n%i;

j = j/(i/10);

return j;
}

int main()
{
const int res = -1;
int a,b,c;
bool flg;

while(scanf("%d%d%d",&a,&b,&c))
{
if(a==0&&b==0)break;

flg = true;
for(int i=1;i<=c;i++)
{
if(getK(a,i) != getK(b,i))
{
flg = false;break;
}
}

if(!flg)
{
printf("%d/n",a+b);
}
else
cout<<res<<endl;

}
return 0;
}


2006年 火星A+B(http://acm.hdu.edu.cn/showproblem.php?pid=1230

(在机子上运行没错,放上去就错了!到现在还没找出错在哪里!哎~~~)

#include<stdio.h>
#include<string.h>

const int num = 30;
int primeKey[num];
int countPrime;  //素数及个数
int a[num],b[num];					//存放两个数
int countA ,countB;			//两个数的的个数
int c[num],countC;

void Prime()   //筛选出素数
{
int i,k;
bool flg;
countPrime = 0;

for(i=2;i<=1000&&countPrime<num;i++,k++)
{
flg = false;
for(int j=2;j*j<=i;j++)
{
if(i%j == 0)
{flg = true;break;}
}
if(!flg)
{
primeKey[countPrime++] = i;
}
}
}

void Input()
{
char ch;
int x;
//清零
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));

while(true)  //输入A
{
scanf("%d%c",&x,&ch);
a[countA++] = x;
if(ch == ' ')break;
}

while(true)		//输入B
{
scanf("%d%c",&x,&ch);
b[countB++] = x;
if(ch != ',')break;
}
}

bool IsZero(int* a,int ai)
{
int i;
for(i=0;i<countA;i++)
{
if(a[i] != 0)return false;
}
return true;
}

void Cadd(int*a,int ai)
{
for(int i=ai;i>=0;i--)
{
if(c[countC]+a[i] >= primeKey[countC])
{
c[countC] = c[countC]+a[i]-primeKey[countC];
countC++;
c[countC] = 1;
}
else
{
c[countC] = c[countC]+a[i];
countC++;
}

}

}

void Add()
{
int i,j;

memset(c,0,sizeof(c));

i = countA-1;
j = countB-1;

while(j>=0&&i>=0)
{
if(c[countC]+a[i]+b[j] >= primeKey[countA-i-1])
{
c[countC] = c[countC]+a[i]+b[j]-primeKey[countA-i-1];
countC++;
c[countC] = 1;
}
else
{
c[countC] = c[countC]+a[i]+b[j];
countC++;
}
j--;i--;
}

if(i>=0)Cadd(a,i);
else if(j>=0)Cadd(b,j);
}

int main()
{

Prime();

while(true)
{
countA=countB=countC=0;
Input();
if(IsZero(a,countA)&&IsZero(b,countB))break;
Add();

printf("%d",c[countC]);

for(int i=countC-1;i>=0;i--)
printf(",%d",c[i]);
printf("/n");

}
return 0;
}


2006年 统计同成绩学生人数(http://acm.hdu.edu.cn/showproblem.php?pid=1235

#include<stdio.h>
int a[1000],ai,score;

int main()
{
int count;
while(scanf("%d",&ai)&&ai!=0)
{
count = 0;
for(int i=0;i<ai;i++)
{
scanf("%d ",&a[i]);
}
scanf("%d",&score);

for(int j=0;j<ai;j++)
{
if(score == a[j])count++;
}

printf("%d/n",count);
}
return 0;
}


2006年 简单计算器(http://acm.hdu.edu.cn/showproblem.php?pid=1237

#include<stdio.h>
#include<string.h>

double od[100];  //操作数
int op[100];     //操作符
int odi,opi;
int prior[4][4] =
{
1,1,-1,-1,
1,1,-1,-1,
1,1,1,1,
1,1,1,1
};

void Input()
{
int x;
char ch1,ch2;
odi = opi = 0;
memset(od,-1,sizeof(od));
memset(op,-1,sizeof(op));

while(true)
{
scanf("%d%c",&x,&ch1);
od[odi++] = x;
if(ch1 != ' ')break;
scanf("%c%c",&ch2,&ch1);
if(ch2 == '+')op[opi++] = 0;
else if(ch2 == '-')op[opi++] = 1;
else if(ch2 == '*')op[opi++] = 2;
else if(ch2 == '/')op[opi++] = 3;
else printf("input error!/n");
}
}

bool IsZero()
{
if(odi==1&&od[0] == 0)return true;

return false;
}

void Switch(int index)
{
for(int i=index;i<odi-1;i++)
{
od[i] = od[i+1];
}
for(int j=index-1;j<opi-1;j++)
{
op[j] = op[j+1];
}
}

void Calculate()
{
while(opi > 1)
{
if(prior[op[0]][op[1]] == 1)
{
switch(op[0])
{
case 0:od[0] = od[0]+od[1]; break;
case 1:od[0] = od[0]-od[1];break;
case 2:od[0] = od[0]*od[1];break;
case 3:od[0] = od[0]/od[1];break;
}
Switch(1);
odi--;opi--;
}
else if(prior[op[0]][op[1]] == -1)
{
switch(op[1])
{
case 0:od[1] = od[1]+od[2];break;
case 1:od[1] = od[1]-od[2];break;
case 2:od[1] = od[1]*od[2];break;
case 3:od[1] = od[1]/od[2];break;
}
Switch(2);
odi--;opi--;
}
}

if(opi==1)
{
switch(op[0])
{
case 0:od[0] = od[0]+od[1]; break;
case 1:od[0] = od[0]-od[1];break;
case 2:od[0] = od[0]*od[1];break;
case 3:od[0] = od[0]/od[1];break;
}
}

printf("%.2lf/n",od[0]);

}

int main()
{
while(true)
{
Input();
if(IsZero())break;
Calculate();
}

return 0;
}


2007年 最小长方形(http://acm.hdu.edu.cn/showproblem.php?pid=1859)
#include<stdio.h>

int main()
{
int x,y;
int x1,y1,x2,y2;
bool flg;

while(true)
{
flg = true;
while(scanf("%d %d",&x,&y)&&(x!=0||y!=0))
{
if(flg)
{
x1=x2=x;y1=y2=y;
flg = false;
}
if(x < x1)
x1 = x;
if(x > x2)
x2 = x;
if(y < y1)
y1 = y;
if(y > y2)
y2 = y;
}
if(flg)break;
printf("%d %d %d %d/n",x1,y1,x2,y2);
}
return 0;
}


2007年 统计字符(http://acm.hdu.edu.cn/showproblem.php?pid=1860

#include<stdio.h>
#include<string.h>
const int Ab = 65;
const int ab = 71;

int c[5];
int n[53];
int ci;

void Switch(char ch)
{
if(ch == ' ')c[ci++] = 52;
else if(ch>64&&ch<91)c[ci++] = ch - Ab;
else if(ch>96&&ch<123)c[ci++] = ch - ab;
else printf("input error!");
}

void SwitchTo(char ch)
{
if(ch == ' ')n[52]++;
else if(ch>64&&ch<91)n[ch - Ab]++;
else if(ch>96&&ch<123)n[ch - ab]++;
else printf("input error!");
}

int main()
{
char ch;
int cr;
while(scanf("%c",&ch)&&ch!='#')
{
ci = 0;
memset(c,-1,sizeof(c));
memset(n,0,sizeof(n));

Switch(ch);
while(scanf("%c",&ch)&&ch!='/n')
{
Switch(ch);
}
while(scanf("%c",&ch)&&ch!='/n')
{
SwitchTo(ch);
}

for(int i=0;i<ci;i++)
{
if(c[i]<26)cr = c[i]+Ab;
else if(c[i]<52)cr = c[i]+ab;
else cr = 32;

printf("%c %d/n",cr,n[c[i]]);
}
}

return 0;
}


2007年 游船出租(http://acm.hdu.edu.cn/showproblem.php?pid=1861)
#include<stdio.h>

struct Time
{
int hour;
int minute;
};
struct Boat
{
int start;
Time sTime;
};

Boat boats[100];
int boati=0;

void InitBoat()
{
for(int i=0;i<100;i++)
{
boats[i].start = 0;
boats[i].sTime.hour = 0;
boats[i].sTime.minute = 0;
}
}

int main()
{
double times = 0,timeSum = 0;
int retime;
int n,h1,m1;
char ch;
InitBoat();

while(scanf("%d",&n)&&n != -1)
{
scanf(" %c %d:%d",&ch,&h1,&m1);  //注意,就是因为这个才出错的

if(n != 0)
{
if(!boats
.start&&ch == 'E')continue; //过滤掉没有开始,就有结束的
if(boats
.start&&ch == 's')continue;	//过滤掉已经开始,又要开始的

if(ch == 'S')
{
boats
.sTime.hour = h1;
boats
.sTime.minute = m1;
boats
.start = 1;
}
else if(ch == 'E')
{
times = (h1-boats
.sTime.hour)*60+(m1-boats
.sTime.minute);
timeSum +=times;
boati++;
boats
.start = 0;
}
else printf("input error");
}
else
{
if(boati==0)
{
printf("0 0/n");
}
else
{
if((timeSum/boati)-(int)(timeSum/boati)>=0.5)
{
retime = (int)(timeSum/boati)+1;
}
else
retime = (int)(timeSum/boati);

printf("%d %d/n",boati,retime);
}

boati = 0;
timeSum = 0;
InitBoat();

}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: