今天是训练的第二天,今天做的是北大平台上的:
1、POJ-->2136:
思路:
把出现字母的频率计算出来,打出空格即可
方法:
#include<stdio.h>
#include<string.h>
int main(){
char a[100];
int T=4,i,j,k,len,b[100],white,max;
memset(b,0,sizeof(b));
max = 0;
while(T--){
gets(a);
len = strlen(a);
for(i=0;i<len;i++){
b[a[i]-'A']++;
}
}//计算字母出现的次数,下面是找到最大的出现次数max
// printf("%d\n",max);
for(i=0;i<26;i++){
if(b[i]>max)
max = b[i];
}
// printf("%d\n",max);
for(i=0;i<max;i++){
for(j=0;j<26;j++){
white = max - b[j];
if(white<=i)
printf("* ");
else printf(" ");
}
printf("\n");
}
for(i=0;i<26;i++)
printf("%c ",i+'A');
printf("\n");
}
思路:相信这题大家只要读懂了题目就会了吧~
Speed in miles perhour | Total elapsed time in hours |
20 | 2 |
30 | 6 |
10 | 7 |
其实它的意思就是“Total elapsed time in hours”的前一个减去后一个再乘上“Speed in miles perhour”
方法:
#include<stdio.h>
int main(){
int T,s[20],t[20],i,j,k,sum;
while(scanf("%d",&T)!=EOF){
i=0;
if(T==-1)
break;
while(T--){
sum=0;
scanf("%d%d",&s[i],&t[i]);
// printf("%d%d\n",s[i],t[i]);
i++;
}
// printf("%d %d\n",s[0],t[0]);
sum = s[0]*t[0];
// printf("%d\n",sum);
for(j=1;j<i;j++)
{
sum = sum+s[j]*(t[j]-t[j-1]);
}
printf("%d miles\n",sum);
}
}
3、POJ-->1207
思路:对所有的数字求出cycle number
方法:
#include<stdio.h>
int fun(int a){
int i,j,k,r;
r = 1;
while(a!=1){
if(a%2==0)
a = a/2;
else
a = a*3+1;
r++;
}
return r;
}
int main()
{
int i,j,k,a,b,temp,p,q;
while(scanf("%d%d",&a,&b)!=EOF){
k=0;
p = a;
q = b;
if(a>b){
temp = a;
a = b;
b = temp;
}
for(i=a;i<=b;i++){
temp=fun(i);
if(temp>k){
k=temp;
}
}
printf("%d %d %d\n",p,q,k);
}
}
思路:这题运用的是“筛选法”,从d(1)开始运算,将求出来的那个数字标志为1,最后输出从1--1000中的标志不为1的数字。
方法:
#include<stdio.h>
#include<string.h>
int main()
{
int flag[10005],i,k,sum,m;
memset(flag,0,sizeof(flag));
for(i=1;i<10000;i++){
m=i;
sum=m;
while(m>0){
sum=sum+m%10;
m = m/10;
}
if(sum<10000)
flag[sum] = 1;
}
for(i=1;i<10000;i++){
if(flag[i]!=1)
printf("%d\n",i);
}
}
5、POJ-->1979:
思路:这题是告诉我们'.' - 表示黑砖 '#' - 表示红砖 '@'- 表示那个人所在的位置,这题用到了递归、
方法:对四个方向进行搜索,将可以经过的位置标记起来。
#include<stdio.h>
#include<string.h>
char a[25][25];
int w,h;
int search(int p,int q){
int i,j,k;
if(p==-1||q==-1||p==h||q==w)
return 0;//已经算到尾巴了
else if(a[p][q]=='#'||a[p][q]==1){
return 0;
}
else{
a[p][q]=1;
search(p-1,q);
search(p,q-1);
search(p,q+1);
search(p+1,q);
}
}
int main(){
int i,j,k,p,q;
while(scanf("%d%d",&w,&h)!=EOF){
if(w==0&&h==0)
break;
getchar();
k=0;
for(i=0;i<h;i++){
for(j=0;j<w;j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='@'){
a[i][j]='.';
p = i;
q = j;
}
}
getchar();
}
search(p,q);
for(i=0;i<h;i++){
for(j=0;j<w;j++){
if(a[i][j]==1)
k++;
}
}
printf("%d\n",k);
}
}
这些就是我今天学的,明天要努力啦,哈哈