299 - Train Swapping
列车交换
简单的排序统计问题
#include<string.h>
#include<stdio.h>
int main()
{
freopen("1.txt","r",stdin);
int n,l,i,j,k;
int num[51],temp,count=0;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&l);
for(j=0;j<l;j++)
scanf("%d",&num[j]);
for(j=1;j<=l-1;j++)
for(k=0;k<l-j;k++)
if(num[k]>num[k+1])
{
temp=num[k+1];
num[k+1]=num[k];
num[k]=temp;
count++;
}
printf("Optimal train swapping takes %d swaps.
/n",count);
count=0;
}
}
return 0;
}
10420 - List of Conquests
征服列表简单的排序比较问题
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int cmp_string(const void*_a,const void*_b)
{
char* a=(char*)_a;
char* b=(char*)_b;
return strcmp(a,b);
}
int main()
{
freopen("1.txt","r",stdin);
int n,i,j,num[2000];
char country[2000][70];
char line[100];
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
gets(line);
num[i]=1;
for(j=0;j<strlen(line);j++)
if(line[j]==' ')
country[i][j]='/0';
else
country[i][j]=line[j];
}
qsort(country,n,sizeof(country[0]),cmp_string);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(strcmp(country[i],country[j])==0)
{num[i]++;country[j][0]='/0';}
for(i=0;i<n;i++)
if(strlen(country[i])>=1)
printf("%s %d/n",country[i],num[i]);
return 0;
}
537 - Artificial Intelligence?
#include<string.h>
#include<stdio.h>
int main()
{
freopen("1.txt","r",stdin);
int n,len,i,j,num=1;
char c1,c2,prefix,ch;
float f1,f2;
scanf("%d/n",&n);
for(i=1;i<=n;i++)
{
while(1)
{
ch=getchar();
if(ch=='=')break;
c1=ch;
}
scanf("%f%c",&f1,&prefix);
if(prefix=='m') f1/=1000;
else if(prefix=='k') f1*=1000;
else if(prefix=='M') f1*=1000000;
while(1)
{
ch=getchar();
if(ch=='=')break;
c2=ch;
}
scanf("%f%c",&f2,&prefix);
if(prefix=='m') f2/=1000;
else if(prefix=='k') f2*=1000;
else if(prefix=='M') f2*=1000000;
printf("Problem #%d/n",num++);
if((c1=='U'&&c2=='I')||(c1=='I'&&c2=='U'))
printf("P=%.2fW/n/n",f1*f2);
else if(c1=='P'&&c2=='I')
printf("U=%.2fV/n/n",f1/f2);
else if(c2=='P'&&c1=='I')
printf("U=%.2fV/n/n",f2/f1);
else if(c1=='P'&&c2=='U')
printf("I=%.2fA/n/n",f1/f2);
else if(c2=='P'&&c1=='U')
printf("I=%.2fA/n/n",f2/f1);
}
return 0;
}
10010 - Where's Waldorf?
简单的暴力算法
关键点在输出格式
每个情况的最后一种情况不输出空格
#include<stdio.h>
#include<string.h>
char aim[51][51],test[51];
int same1(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,j++)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same2(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,i++)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same3(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,j--)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same4(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,i--)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same5(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,i++,j++)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same6(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,i++,j--)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same7(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,i--,j++)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int same8(int i0,int j0,int len)
{
int i,j,k=0;
for(i=i0,j=j0;k<len;k++,i--,j--)
if(aim[i][j]!=test[k])
return 0;
return 1;
}
int main()
{
freopen("1.txt","r",stdin);
int i,j,k,s,len,g;
int num_1,num_2,num_3,num_4;
while(scanf("%d",&num_1)!=EOF)
{
for(i=0;i<num_1;i++)
{
scanf("%d %d",&num_2,&num_3);
for(j=0;j<num_2;j++)
scanf("%s",aim[j]);
for(j=0;j<num_2;j++)
for(k=0;k<num_3;k++)
if(aim[j][k]>='A'&&aim[j][k]<='Z')
aim[j][k]+=32;
scanf("%d",&num_4);
for(j=0;j<num_4;j++)
{
scanf("%s",test);
len=strlen(test);
for(k=0;k<strlen(test);k++)
if(test[k]>='A'&&test[k]<='Z')
test[k]+=32;
for(k=0;k<num_2;k++)
for(s=0;s<num_3;s++)
if(aim[k][s]==test[0])
{
if(same1(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same2(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same3(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same4(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same5(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same6(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same7(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
if(same8(k,s,len))
{printf("%d %d/n",k+1,s+1);goto
a;}
}
a: g++;
}
if(i<num_1-1)
printf("/n");
}
}
return 0;
}
Problem E: Automatic Editing
有点乱但思路是对的
原理就是查找替换
#include<stdio.h>
#include<string.h>
char in[260],temp[260];
char rules[11][82],replace[11][82];
int find_replace(char* s,char* ru,char* rep)
{
int lena=strlen(s);
int lenb=strlen(ru);
int lenc=strlen(rep);
int i,j,t,k;
for(i=0,j=0;i<lena-lenb+1;)
{
k=i;
while(k<lena&&j<lenb)
{
if(s[k++]!=ru[j++])
{
i++;j=0;
break;
}
}
if(j==lenb)
{
for(t=0;t<i;t++)
{
temp[t]=s[t];
}
for(j=0;j<lenc;j++)
{
temp[t++]=rep[j];
}
for(;k<lena;k++)
{
temp[t++]=s[k];
}
temp[t]='/0';
strcpy(s,temp);
i=0;lena=strlen(s);j=0;
}
}
return 0;
}
int main()
{
freopen("1.txt","r",stdin);
int num;
while(scanf("%d",&num)&&num!=0)
{
getchar();
int i;
for(i=0;i<num;i++)
{
gets(rules[i]);
gets(replace[i]);
}
gets(in);
i=0;
for(i=0;i<num;i++)
{
find_replace(in,rules[i],replace[i]);
}
printf("%s/n",in);
}
return 0;
}
409 - Excuses, Excuses!
交了很多遍一直runtime error
没法只好重做,因为思路是对的所以就该对了
#include <stdio.h>
#include <string.h>
#define N 25
int m,n;
char s[N][N],ss[80];
char str[N][80];
int num[N];
int Max;
int find()
{
int i;
for(i = 1; i <= m; i++)
if(!strcmp(s[i],ss))return 1;
return 0;
}
int main()
{
freopen("1.txt","r",stdin);
int c = 0,len;
char ch;
int i,j,top,max;
while(scanf("%d%d",&m,&n) != EOF)
{
for(i = 1; i <= m; i++)
scanf("%s",s[i]);
getchar();
top = 0;
Max = 0;
for(i = 1; i <= n; i++)
{
gets(str[i]);
num[i] = 0;
len = strlen(str[i]);
top = 0;
for(j = 0; j < len; j++)
{
ch = str[i][j];
if(ch >= 'A' && ch <= 'Z')ch += 32;
if(ch >= 'a' && ch <= 'z')
ss[top++] = ch;
else if(top)
{
ss[top] = '/0';
if(find())num[i]++;
top = 0;
}
else
continue;
}
if(num[i] > Max)Max = num[i];
}
printf("Excuse Set #%d/n",++c);
for(i = 1; i <= n; i++)
if(num[i] == Max)
puts(str[i]);
putchar('/n');
}
return 0;
}
这题一开始时,总是Runtime Error,怎么也不知错在哪里?后来,我向
高人请教。一开始时他也Runtime Error,但他后来AC了。他告诉我,是
数组开小了,开辟到100000就行了。为什么呢,因为题目中有隐藏的细节
,就是:有重复的单词可能使单词个数远超过5000,5000只是最后去重的
结果。
这个细节我怎么也没注意到,我问他怎么看到的;他回答说是从题目中看
到的。最后,他教导我说:学这么长时间了,还是训练不到位,继续努力
!
我想问他,怎么个努力,可我没说。我想至于努力那是你自己事情,
自己的事情自己解决!
从这题中我们受到的启发,就是认真读题,对于数据问题,要分析清楚,
往往这正是出题人的意图。
AC Code
/*
C Source Code
By Ahshua
Time: 22:03:59 29.06.2010
*/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char d[100010][210]={'/0'};
int n=0,len=0;
int cmp_string(const void* _a,const void* _b)
{
char* a= (char*)_a;
char* b= (char*)_b;
return strcmp(a,b);
}
int main()
{
char ch;
while(1)
{
if((ch=getchar())==EOF) break;
if(isalpha(ch))
d[n][len++]=tolower(ch);
else
if(isalpha(d[n][0])){ d[n++][len]='/0';len=0; }
}
qsort(d,n,sizeof(d[0]),cmp_string);
for(int i=0;i<n;i++)
if(strcmp(d[i],d[i+1]))
printf("%s/n",d[i]);
return 0;
}
644 - Immediate Decodability
原理是排序比较
#include<stdio.h>
#include<string.h>
int is_ok(char b[10][12],int num )
{
int i,j,k,place;
for(i=0;i<num;i++)
{
for(j=i+1;j<num;j++)
{
for(k=0;k<strlen(b[i]);k++)
if(b[i][k]!=b[j][k])
{place=0;break;}
else place=1;
if(place) return 1;
}
}
return 0;
}
int main()
{
freopen("1.txt","r",stdin);
int i=0,j=0,num,ok,k=1;
char a[12],temp[12],b[10][12];
while(scanf("%s",b[i])!=EOF)
{
if(b[i][0]!='9')
i++;
else
{
num=i;
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
if(strlen(b[i])>strlen(b[j]))
{
strcpy(temp,b[j]);
strcpy(b[j],b[i]);
strcpy(b[i],temp);
}
if(is_ok(b,num )==0)
printf("Set %d is immediately decodable/n",k++);
else
printf("Set %d is not immediately decodable/n",k
++);
num=0;i=0;
}
}
return 0;
}
自动诗
10361 - Automatic Poetry
#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
int num,i,j,k;
int mark[5];
char ch1[N],ch2[N],s1[N],s2[N],temp1[N],temp2[N];
while(scanf("%d",&num)!=EOF)
{
getchar();
for(i=0;i<num;i++)
{
gets(ch1);
gets(ch2);
k=0;
for(j=0;j<strlen(ch1);j++)
if(ch1[j]!='<'&&ch1[j]!='>')
printf("%c",ch1[j]);
else
{mark[k]=j;k++;}
printf("/n");
k=0;
for(j=mark[0]+1;j<mark[1];j++)
{temp1[k]=ch1[j];k++;}
for(j=mark[3]+1;j<strlen(ch1);j++)
{temp1[k]=ch1[j];k++;}
temp1[k]='/0';
k=0;
for(j=mark[2]+1;j<mark[3];j++)
{temp2[k]=ch1[j];k++;}
for(j=mark[1]+1;j<mark[2];j++)
{temp2[k]=ch1[j];k++;}
temp2[k]='/0';
for(j=0;j<strlen(ch2);j++)
if(ch2[j]!='.')
printf("%c",ch2[j]);
else break;
printf("%s%s/n",temp2,temp1);
}
}
return 0;
}
465 - Overflow
主要问题是理清思路逻辑问题
核心是大数加法和大数乘法
#include<stdio.h>
#include<string.h>
#define N 500
void GetDigits(int *a, char *s)
{
int i;
char digit;
int len=strlen(s);
for(i=0;i<N;i++)
*(a+i)=0;
for(i=0;i<len;i++)
*(a+len-i-1) = *(s+i) - '0';
}
int main()
{
int i,j,k,first,second,mulresult,addresult;
char ch[2];
char a0[N],e0[N],a[N],e[N],ss[N*N],m[11]="2147483647";
int b[N],d[N],c[N*N];
while(scanf("%s%s%s",a0,ch,e0)!=EOF)
{
first=second=mulresult=addresult=0;
printf("%s %s %s/n",a0,ch,e0);
for(i=0;i<strlen(a0);i++)
if(a0[i]!='0')
break;
for(j=0;i<=strlen(a0);i++,j++)
a[j]=a0[i];
for(i=0;i<strlen(e0);i++)
if(e0[i]!='0')
break;
for(j=0;i<=strlen(e0);i++,j++)
e[j]=e0[i];
if(strlen(a)<strlen(m)||(strlen(a)==strlen(m)
&&strcmp(a,m)<=0))
first=0;
else
first=1;
if(strlen(e)<strlen(m)||(strlen(e)==strlen(m)
&&strcmp(e,m)<=0))
second=0;
else
second=1;
GetDigits(b,a);
GetDigits(d,e);
if(ch[0]=='+')
{
for(i=0;i<N*N;i++)
c[i]=0;
for(i=0;i<N;i++)
c[i]=b[i]+d[i];
for(i=0;i<N+2;i++)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
j=N*N-1;
while(!c[j])j--;
for(i=j,k=0;i>=0;i--,k++)
ss[k]=c[i]+48;
ss[k]='/0';
if(strlen(ss)<strlen(m)||(strlen(ss)==strlen
(m)&&strcmp(ss,m)<=0))
addresult=0;
else
addresult=1;
}
else
{
for(i=0;i<N*N;i++)
c[i]=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
c[i+j]+=b[i] * d[j];
for(i=0;i<N*2-1;i++)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
while(!c[j])j--;
for(i=j,k=0;i>=0;i--,k++)
ss[k]=c[i]+48;
ss[k]='/0';
if(strlen(ss)<strlen(m)||(strlen(ss)
==strlen(m)&&strcmp(ss,m)<=0))
mulresult=0;
else
mulresult=1;
}
if(first)
printf("first number too big/n");
if(second)
printf("second number too big/n");
if(addresult||mulresult)
printf("result too big/n");
}
return 0;
}
748 - Exponentiation
本题不难但步骤较多
问题主要在对小数点的处理
和对0的处理
#include <stdio.h>
#include <string.h>
#define N 200
int i,j=0,t=0,b[N],c[N*2];
int GetDigits(int *a, char *ch)
{
int i;
int len=strlen(ch);
for(i=0;i<N;i++)
a[i]=0;
for(i=0;i<len;i++)
{
a[len-i-1] =ch[i] - '0';
}
return a[N];
}
int multiply(int *a,int *b,int *c)
{
int i,j;
for(i=0;i<N*2;i++)
c[i]=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
c[i+j]+=a[i] * b[j];
for(i=0;i<2*N-1;i++)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
return c[N];
}
int main()
{
// freopen("1.txt", "r", stdin);
char s[N+1],ch[N];
int m,point;
int a[N];
while( scanf("%s%d",s,&m)!=EOF)
{
//去掉后导0
for(i=0;i<strlen(s);i++)
if(s[i]=='.')
break;
for(j=strlen(s)-1;j>i;)
if(s[j]=='0')
j--;
else break;
s[j+1]='/0';
if(m==1)
{ printf("%s/n",s);continue;}
else
{
//计算小数点
for(j=0,i=0;i<strlen(s);i++)
if(s[i]!='.')
ch[j++]=s[i];
else
point = strlen(s)-i-1;
ch[j]='/0';
point*=m;//小数位数
b[N]=GetDigits(b,ch);
i=N-1;
c[N]=multiply(b,b,c);
//大数乘幂
for(i=0;i<N;i++)
a[i] = b[i];
for (j = 1; j < m; j++)
{
c[N*2]=multiply(a,b,c);
for(i=0;i<N;i++)
b[i]=c[i];
if (j != m- 1)
memset(c, '0', sizeof(c));
}
//忽略前导0
j=N*2-1;
while(c[j]==0)
j--;
// 插入小数点
if((j+1)<point)
{
printf(".");
while(point-1!=j)
{
printf("0");
point--;
}
for(i=j;i>=0;i--)
{
printf("%d",c[i]);
}
}
else
for(i=j;i>=0;i--)
{
if(i==point-1)
printf(".");
printf("%d",c[i]);
}
printf("/n");
}
}
return 0;
}
细胞自动复制机
读不懂题意
炒的代码
#include<stdio.h>
#include<string.h>
int main()
{
int n,k;
scanf("%d",&n);
for (k=1;k<=n;k++)
{
int DNA[10];
int i,j;
for (i=0;i<=9;i++)
scanf("%d",&DNA[i]);
int now[50]={0},old[50];
now[20]=1;
for (i=1;i<=50;i++)
{
for (j=1;j<=40;j++)
{
if (now[j]==0) printf(" ");
else if (now[j]==1) printf(".");
else if (now[j]==2) printf("x");
else printf("W");
}
printf("/n");
memcpy(old,now,sizeof(old));
for (j=1;j<=40;j++)
now[j]=DNA[old[j-1]+old[j]+old[j+1]];
}
if (k!=n) printf("/n");
}
return 0;
}
694 The Collatz Sequence
类似3n+1
#include<stdio.h>
int main()
{
freopen("1.txt","r",stdin);
long i,j,m;
int count,num=1;
while(scanf("%ld%ld",&i,&j)!=EOF)
{
m=i;
count=1;
if(i<0&&j<0)
break;
while(i!=1)
{
if(i%2==1)
i=3*i+1;
else
i=i/2;
if(i>j)
break;
count++;
}
printf("Case %d: A = %ld, limit = %ld, number of
terms = %d/n",num++,m,j,count);
}
return 0;
}
迷宫问题
学会了不加限制读一条输出一条
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char a[140];
int i=0,j=0,m=0,k=0;
while(gets(a))
{
m=strlen(a);
for(i=0;i<m;i++)
{
if(a[i]=='!'||a[i]=='/n')
printf("/n");
else{
if(isdigit(a[i]))
k+=a[i]-'0';
else{
for(j=0;j<k;j++)
if(a[i]=='b')
printf(" ");
else
printf("%c",a[i]);
k=0;
}
}
}
printf("/n");
}
return 0;
}
表面问题
#include <stdio.h>
#include <string.h>
int main()
{
int i,j,temp,total,m,num;
int b[400];
char a[400];
while(scanf("%d",&m)!=EOF&&m!=0)
{
getchar();//用于吸收回车符
for(i=1;i<=m;i++)
{
gets(a);
num=0;
for(j=0;j<strlen(a);j++)
if(a[j]!='X')
num++;
b[i]=num;
}
for(i=1;i<=m;i++)
for(j=i+1;j<=m;j++)
if(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
total=0;
for(i=2;i<=m;i++)
total+=b[i]-b[1];
printf("%d/n",total);
}
return 0;
}
刽子手游戏
本题的关键是弄清题意
#include <stdio.h>
#include <string.h>
int main()
{
unsigned int i,j,k;
int n,wrong,right,place,lon;
char a[100],b[100],c[100];
while(scanf("%d",&n)!=EOF)
{
//去除要猜单词中相同的元素以获得实际长度lon
if(n==-1)break;
scanf("%s%s",a,b);
for(i=0;i<strlen(a);i++)
for(j=i+1;j<strlen(a);j++)
if(a[i]==a[j])
a[j]='0';
lon=0;
for(i=0;i<strlen(a);i++)
if(a[i]!='0')
lon++;
//按题意猜词
wrong=0;right=0;k=strlen(b);
for(i=0; i<k;i++)
{
place=0;
for(j=0;j<strlen(a);j++)
{
if(b[i]==a[j])
{
place=1;
a[j]='0';//如果猜中就把该词划掉
}
}
//统计正确错误的个数
if(place==1)
right++;
if(place==0)
wrong++;
if(right==lon)
{printf("Round %d/nYou win./n",n);break;}
else if(wrong>=7)
{printf("Round %d/nYou lose./n",n);break;}
}
if(wrong<7&&right<lon)
printf("Round %d/nYou chickened out./n",n);
}
return 0;
}
旋转句
实质矩阵旋转
#include<stdio.h>
#include<string.h>
#define N 110
int main()
{
int i=0,j,place,max;
char a[N][N]={0};
while(gets(a[i]))//这里关键
{
max=strlen(a[0]);
if(strlen(a[i])>max)
max=strlen(a[i]);
i++;
}
place=i;//这里关键
for(i=0;i<place;i++)
for(j=0;j<max;j++)
if(!a[i][j])
a[i][j]=' ';//这里关键
for(i=0;i<max;i++)
{
for(j=place-1;j>=0;j--)
putchar(a[j][i]);
printf("/n");
}
return 0;
}
三角波
#include<stdio.h>
int main()
{
int a,b,c,i,j,k1,k2;
while(scanf("%d",&a)!=EOF)
{
//printf("/n");原本想模仿输出结果弄的自己惨不忍睹wa了好
几次错在这
for(i=0;i<a;i++)
{
scanf("%d%d",&b,&c);
for(j=0;j<c;j++)
{
for(k1=1;k1<=b;k1++)
{
for(k2=1;k2<=k1;k2++)
printf("%d",k1);
printf("/n");
}
for(k1=b-1;k1>=1;k1--)
{
for(k2=k1;k2>=1;k2--)
printf("%d",k1);
printf("/n");
}
if(i<a-1||j<c-1)//关键在这
printf("/n");
}
}
}
return 0;
}
N!怎样省时
#include <stdio.h>
#define UNIT 100000
#define LEN 10000
unsigned int num[LEN];
/* 计算 N! */
void caculate(unsigned int *num, const int n)
{
int i, j, len, res;
num[0] = 1;
len = 1;
for (i = 1; i <= n; i++)
{
res = 0;
for (j = 0; j < len; j++)
{
num[j] = num[j] * i + res;
res = num[j] / UNIT;
num[j] %= UNIT;
}
if (res > 0)
{
num[len++] = res;
}
}
printf("%d/n", len);
printf("%d", num[len-1]);
for (i = len - 2; i >= 0; i--)
{
printf("%5.5u", num[i]);
}
putchar('/n');
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
caculate(num, n);
}
return 0;
}
高中物理
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
printf("%d/n",a*b*2);
}
return 0;
}
小学幼儿园
494 - Kindergarten Counting Game
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 1000
int main()
{
int i,word,count;
char a[N];
while(fgets(a,sizeof(a),stdin))
{
count =0;word=0;
for(i=0;i<strlen(a);i++)
{
if(isalpha(a[i])&&!isalpha(a[i+1]))
word=1;
else
word=0;
count+=word;
}
printf("%d/n",count);
}
return 0;
}
458 - The Decoder
解码器
#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
int i;
char a[N],b[N];
freopen("748.txt","r",stdin);
while(scanf("%s",a)!=EOF)
{
for(i=0;i<strlen(a);i++)
{
b[i]=a[i]-7;
}
b[i]='/0';
printf("%s/n",b);
}
return 0;
}
10300 - Ecological Premium
生态奖金
#include<stdio.h>
int main()
{
int i,k,n,s,t,sum;
while(scanf("%d",&n)!=EOF)
{while(n--)
{
scanf("%d",&s);
sum=0;
while(s--)
{ scanf("%d %d %d",&k,&i,&t);
sum+=k*t ;
}
printf("%d/n",sum);
}
}
return 0;
}
401 - Palindromes交了20多遍终于ACle
错误有一开始没判断大小
判断景象的算法不对
输出格式也不对
#include<stdio.h>
#include<string.h>
#define MAXN 30
char one[]="AEHIJLMOSTUVWXYZ12358";
char two[]="A3HILJMO2TUVWXY51SEZ8";
int ism(char a,char b,int m,int i)
{
int t;
for(t=0;t<strlen(one);t++)
{
if(a==one[t]&&b==two[t]||b==one[t]
&&a==two[t])
return 1;
}
return 0;
}
int main()
{
int i,j,t,place,opsite;
unsigned int m=0;
char a[MAXN];
while(scanf("%s",a)!=EOF)
{ place=1;opsite=0;
m=strlen(a);
for(i=0;i<m-i;i++)
{
if(a[i]!=a[m-i-1])
{place=0;break;}
}
for(i=0;i<m;i++)
{opsite=ism(a[i],a[m-i-1],m,i);
if(!opsite)break;}
if(place&&opsite)
printf("%s -- is a mirrored palindrome./n/n", a);
else if(place)
printf("%s -- is a regular palindrome./n/n", a);
else if(opsite)
printf("%s -- is a mirrored string./n/n", a);
else
printf("%s -- is not a palindrome./n/n", a);
}
return 0;
}
10106 - Product
大数相乘
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 300
void GetDigits(int *a,char *s);
void multiply(int *a,int *b,int *c);
int main()
{
char s1[N],s2[N];
int i,j,a[N],b[N],c[N*2];
while(scanf("%s/n%s",s1,s2)!=EOF)
{if(strlen(s1)==1&&s1[0]=='0'||strlen(s2)==1&&s2[0]=='0')
{printf("0/n");continue;}
else{GetDigits(a,s1);
GetDigits(b,s2);
multiply(a,b,c);
j=N*2-1;
while(c[j]==0)
j--;
for(i=j;i>=0;i--)
printf("%d",c[i]);
printf("/n");
}
}
return 0;
}
void GetDigits(int *a, char *s)
{
int i;
char digit;
int len=strlen(s);
for(i=0;i<N;i++)
*(a+i)=0;
for(i=0;i<len;i++)
{
digit=*(s+i);
*(a+len-1-i) = digit - '0';
}
}
void multiply(int *a,int *b,int *c)
{
int i,j;
for(i=0;i<N*2;i++)
*(c+i)=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
*(c+i+j)+=*(a+i) * *(b+j);
for(i=0;i<N*2-1;i++)
{
*(c+i+1)+=*(c+i)/10;
*(c+i)=*(c+i)%10;
}
}
//大数相除和取余
类似于乘法
#include<stdio.h>
#include<string.h>
#define maxn 1000
int a[maxn], c[maxn],i,j;
long long b;
long long yu;
char s1[maxn], op[3];
void divandmod( int *a,char *s,char *op,long long b,int j)
{
for (i=1;i<=j;i++) a[i]=s1[j-i]-'0';
//将字符串转化为数组
memset(c,0,sizeof(c));
yu=0;
//初始化除数数组和余数为0
for (i=j;i>=1;i--)
{
//数组反转
yu=yu*10+a[i];
c[i]=yu/b;
yu=yu%b;
}
while (c[j]==0 && j>1) j--;
//除去前导0
if (op[0]=='/')
{
for (i=j;i>=1;i--) printf("%d",c[i]); //c中存的是
商
printf("/n");
}
else
printf("%lld/n",yu); //yu是余数
}
int main()
{
freopen("1.txt","r",stdin);
while (scanf("%s%s%lld",s1,op,&b)!=EOF)
{
j=strlen(s1);
divandmod( a,s1,op,b,j);
}
return 0;
}
424 - Integer Inquiry
#include<stdio.h>
#include<string.h>
#define N 100
void Addnum(int *a,int *b)
{
int i;
for(i=0;i<N;i++)
*(b+i)+=*(a+i);
for(i=0;i<N*100;i++)
{
*(b+i+1)+=*(b+i)/10;
*(b+i)=*(b+i)%10;
}
}
void GetDigits(int *a, char *s)
{
int i;
char digit;
int len=strlen(s);
for(i=0;i<N;i++)
*(a+i)=0;
for(i=0;i<len;i++)
{
digit=*(s+i);
*(a+len-1-i) = digit - '0';
}
}
int main()
{ int i,j=N*100-1;
char a[N];
int c[N*100]={0},b[N]={0};
while(1)
{
scanf("%s",a);
if(strlen(a)==1&&a[0]=='0')
{
while(!c[j])j--;
for(i=j;i>=0;i--)
printf("%d",c[i]);
printf("/n");break;}
GetDigits(b,a);
Addnum(b,c);
}
return 0;
}
10878 - Decode the tape
#include<stdio.h>
int pingfang(int i)
{
switch(i)
{
case 1:return 128;
case 2:return 64;
case 3:return 32;
case 4:return 16;
case 5:return 8;
case 7:return 4;
case 8:return 2;
case 9:return 1;
defult :return 0;
}
}
int main()
{
int i,j,d,t=0;
char a[12];
while(gets(a)!=NULL)
{
d=0;
if(a[0] != '|') continue;
for(i=0;i<11;i++)
{if(a[i]=='o')
d+=pingfang(i);
}
putchar(d);
}
return 0;
}
100 - The 3n + 1 problem
其实问题只有一个就是i和j的大小问题
我还想了longlong来解决多余!!!!
主要的输入的一句话
You can assume that no operation overflows a 32-bit integer.
哎还是理解能力差啊!!
************
#include<stdio.h>
int max(int n)
{
int count=0;
while(1)
{
count++;
if(n==1) break;
else if(n%2!=0)
{n=3*n+1;
}
else
n=n/2;
}
return count;
}
int f(int i,int j)
{
int temp,m,n;
if(i>j){temp=i;i=j;j=temp;}
m=max(i);
for(;i<=j;i++)
{
n=max(i);
if(n>m)
m=n;
}
return m;
}
int main()
{
int i,j,m,t,temp;
while(scanf("%d %d",&i,&j)!=EOF)
{ m=f(i,j);
printf("%d %d %d/n",i,j,m);
}
return 0;
}
********************
longlong函数
#include<stdio.h>
int max(long long n)
{
int count=0;
while(1)
{
count++;
if(n==1) break;
else if(n%2!=0)
{n=3*n+1;
}
else
n=n/2;
}
return count;
}
int f(int i,int j)
{
int temp,m,n;
if(i>j){temp=i;i=j;j=temp;}
m=max(i);
for(;i<=j;i++)
{
n=max(i);
if(n>m)
m=n;
}
return m;
}
int main()
{
int i,j,m,t,temp;
while(scanf("%d %d",&i,&j)!=EOF)
{ m=f(i,j);
printf("%d %d %d/n",i,j,m);
}
return 0;
}
**********************************
c++函数
#include<iostream>
using namespace std;
int t3n1(int n){
int num=1;
while(n!=1){
if(n%2)
n=3*n+1;
else
n=n/2;
num++;
}
return num;
}
int work(int n,int m){
int max=0,tmp;
for(int i=n;i<=m;i++)
if(max<(tmp=t3n1(i)))
max=tmp;
return max;
}
int main(){
int n,m;
while(cin>>n>>m){
if(n>m){
cout<<n<<' '<<m<<' '<<work(m,n)<<endl;
}
else
cout<<n<<' '<<m<<' '<<work(n,m)<<endl;
}
return 0;
}