目录
1001 害死人不偿命的(3n+1)猜想
#include <stdio.h>
int main()
{
int n,sum=0;
scanf("%d",&n);
while(n!=1)
{
if(n%2==0)
{
n/=2;
sum++;
}
else
{
n=(3*n+1)/2;
sum++;
}
}
printf("%d",sum);
}
1002 写出这个数
#include<stdio.h>
int main()
{
char s[100];
if(scanf("%s",s)){}
int i=0,sum=0;
while(s[i]!='\0')
{
sum+=(int)s[i++]-48;
}
if(sum==0)
{
printf("ling");
}
else
{
int a[10],j=0;
while(sum!=0)
{
a[j++]=sum%10;
sum/=10;
}
for(int t=j-1;t>=0;t--)
{
if(a[t]==1)
printf("yi");
if(a[t]==2)
printf("er");
if(a[t]==3)
printf("san");
if(a[t]==4)
printf("si");
if(a[t]==5)
printf("wu");
if(a[t]==6)
printf("liu");
if(a[t]==7)
printf("qi");
if(a[t]==8)
printf("ba");
if(a[t]==9)
printf("jiu");
if(a[t]==0)
printf("ling");
if(t!=0)
{
printf(" ");
}
}
}
return 0;
}
1003 我要通过!
题目意思:
- P和T有且只能有一个
- 设p前A的个数为t1,P、T中间A的个数为t2,T后A的个数为t3,须满足t1*t2=t3
#include<stdio.h>
int main()
{
int n;
char a[10][100];
scanf("%d",&n);
//输入字符串
for(int i=0;i<n;i++)
{
scanf("%s",a[i]);
getchar();
}
//遍历字符串
for(int j=0;j<n;j++)
{
int t=0,flag=0,t1=0,t2=0,t3=0,p1=0,p2=0;
while(a[j][t]!='\0')
{
//判断是否有不是PAT的字符
if(a[j][t]!='P'&&a[j][t]!='A'&&a[j][t]!='T')
{
flag++;
}
//A的所有个数
if(a[j][t]=='A')
{
t1++;
}
//求P的个数
if(a[j][t]=='P')
p1++;
//求T的个数
if(a[j][t]=='T')
p2++;
t++;
}
t=0;
//求P前A的个数
while(a[j][t]!='P')
{
if(a[j][t]=='A')
t2++;
t++;
}
t=0;
//求T前A的个数
while(a[j][t]!='T')
{
if(a[j][t]=='A')
t3++;
t++;
}
if(flag==0&&(t3-t2)!=0&&t2*(t3-t2)==(t1-t3)&&p1==1&&p2==1)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
1004 成绩排名
这道题一开始总提示部分正确,也是看了别人的博客才知道把n的范围扩大到10000就正确了
#include<stdio.h>
int main()
{
char name[10000][30],sno[10000][30];
int n,score[10000],max,min,a=0,b=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s%s%d",name[i],sno[i],&score[i]);
}
max=score[0];
min=score[0];
for(int i=0;i<n;i++)
{
if(max<score[i])
{
max=score[i];a=i;
}
if(min>score[i])
{
min=score[i];b=i;
}
}
printf("%s %s\n",name[a],sno[a]);
printf("%s %s\n",name[b],sno[b]);
return 0;
}
1005 继续(3n+1)猜想
来自菜鸟的暴力解决法
思路:
- 获取数列中每个数的猜想数,存入二维数组
- 数列num[i]与每个数的猜想数相比较,如果相等则令num[i]=-1,相当于删除此数
- 找出数列num中所有不是-1的数,即关键数,并存入一个数组
- 冒泡排序
#include<stdio.h>
int main()
{
int k,num[100],_num[100][100];
scanf("%d",&k);
//输入数列
for(int i=0;i<k;i++)
{
scanf("%d",&num[i]);
}
//找出每个数的猜想数
int t;
for(int i=0;i<k;i++)
{
int j=0;
t=num[i];
while(t>1)
{
if(t%2==0)
{
t/=2;
_num[i][j++]=t;
}
else
{
t=(3*t+1)/2;
_num[i][j++]=t;
}
}
}
//标记非关键数
for(int i=0;i<k;i++)
{
int t=0;
while(_num[i][t]!=1)
{
for(int j=0;j<k;j++)
{
if(num[j]==_num[i][t])
num[j]=-1;
}
t++;
}
}
//提取关键数
int sum=0,new[100],p=0;
for(int i=0;i<k;i++)
{
if(num[i]!=-1)
new[p++]=num[i];
}
sum=p;
//冒泡排序
int temp,flag=0;
for(int i=0;i<sum;i++)
{
flag=0;
for(int j=sum-1;j>=i;j--)
{
if(new[j]>new[i])
{
temp=new[i];
new[i]=new[j];
new[j]=temp;
flag=1;
}
}
if(flag==0)
break;
}
//输出
for(int i=0;i<sum;i++)
{
printf("%d",new[i]);
if(i!=sum-1)
printf(" ");
}
}
1006 换个格式输出整数
#include<stdio.h>
int main()
{
int n,a[3];
scanf("%d",&n);
for(int i=0;i<3;i++)
{
a[i]=n%10;
n/=10;
}
for(int i=a[2];i>0;i--)
{
printf("B");
}
for(int i=a[1];i>0;i--)
{
printf("S");
}
for(int i=1;i<=a[0];i++)
{
printf("%d",i);
}
}
1007 素数对猜想
#include<stdio.h>
#include<math.h>
int main()
{
int n,a[10000],j=0,sum1=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int sum=0;
for(int t=2;t<=sqrt(i);t++)
{
if(i%t==0)
{
sum=1;
}
}
if(sum==0)
{
a[j++]=i;
if(a[j-1]-a[j-2]==2)
sum1++;
}
}
printf("%d",sum1);
}
1008 数组元素循环右移问题
解题关键是M可以大于N,因此应m=m%n;
//解法一:数组元素位置不变,只是打印位置的改变
#include<stdio.h>
int main()
{
int n,m,a[1000],t;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
m=m%n;
if(n==m)
{
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
if(i!=n-1)
{
printf(" ");
}
}
}
else
{
t=n-m;
for(int i=t;i<n;i++)
{
printf("%d ",a[i]);
}
for(int i=0;i<t;i++)
{
printf("%d",a[i]);
if(i!=t-1)
{
printf(" ");
}
}
}
}
//解法二:数组元素位置改变(我觉得这种方法更符合题意)
#include<stdio.h>
int main()
{
int n,m,a[108],temp,t;
scanf("%d%d",&n,&m);
m=m%n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
if(n==m)
{
for(int i=n-1;i>=0;i--)
{
printf("%d",a[i]);
if(i!=0)
{
printf(" ");
}
}
}
else
{
t=n-m;
for(int i=0;i<m;i++)
{
temp=a[t++];
for(int j=t-1;j>=i;j--)
{
a[j]=a[j-1];
}
a[i]=temp;
}
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
if(i!=n-1)
{
printf(" ");
}
}
}
}
//解法三:(从别人博客偷来的,博客名:黑白之间还有灰【https://me.csdn.net/qq_41525492】)
#include<stdio.h>
int main()
{
int n,m,a[1000],t;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
m=m%n;
for(int i=0;i<n;i++)
{
a[n+i]=a[i];
}
for(int i=0;i<n;i++)
{
a[i]=a[n-m+i];
}
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
if(i!=n-1)
{
printf(" ");
}
}
}
1009 说反话
#include<stdio.h>
int main()
{
char str[80][20],ch;
int i,j;
for(i=0;;i++)
{
scanf("%s",str[i]);
if((ch=getchar())=='\n')
break;
}
for(j=i;j>=0;j--)
{
printf("%s",str[j]);
if(j!=0)
printf(" ");
}
return 0;
}
1010 一元多项式求导
#include<stdio.h>
int main()
{
int a[1000],i,sum=0;
char ch;
for(i=0;;i++)
{
scanf("%d",&a[i]);
if((ch=getchar())=='\n')
break;
}
//求需要输出的元素个数sum
if(a[i]==0)
sum=i-2;
else
sum=i;
//特殊情况的输出:(0 0)以及(x 0)
if((i==0&&a[0]==0))
printf("0 0");
if((i==1&&a[0]==0&&a[1]==0)||(i==1&&a[i]==0))
printf("0 0");
//一般情况的输出
else
{
for(int j=0;j<sum;j+=2)
{
printf("%d %d",a[j]*a[j+1],a[j+1]-1);
if(j!=sum-1)
printf(" ");
}
}
}
1011 A+B 和 C
#include<stdio.h>
int main()
{
long a[100],b[100],c[100];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%ld%ld%ld",&a[i],&b[i],&c[i]);
}
for(int i=0;i<n;i++)
{
if(a[i]+b[i]>c[i])
{
printf("Case #%d: true\n",i+1);
}
else
printf("Case #%d: false\n",i+1);
}
}
1013 数素数
注意点:
- 1不是素数
- 题意是求素数Pm 和素数Pn之间的素数,所以要先求出Pm和Pn
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,a=0,b,c = 0,flag=0,a_flag=0;
scanf("%d%d",&m,&n);
//求素数Pm 和Pn
for(int i=2;;i++)
{
int sum=0;
for(int t=2;t<=sqrt(i);t++)
{
if(i%t==0)
sum=1;
}
if(sum==0)
flag++; //标记是第几个素数
if(a_flag!=1) //防止打印多个a
{
if(flag==m)
{
a_flag=1;
a=i;
}
}
if(flag==n)
{
b=i;
break;
}
}
//求素数
for(int i=a;i<=b;i++)
{
int sum=0;
for(int t=2;t<=sqrt(i);t++)
{
if(i%t==0)
sum++;
}
if(sum==0)
{
c++;
printf("%d",i);
if(c%10==0) //满10个输出回车
{
printf("\n");
continue;
}
if(i!=b) //最后一个素数后没有空格
printf(" ");
}
}
return 0;
}
1012 数字分类
测试点7未通过
#include<stdio.h>
int main()
{
int a[1000],a1=0,a2=0,a3=0,a5=0,sum=0,flag=0,j1=0,a2_flag=0;
double a4=0;
scanf("%d",&sum);
for(int i=0;i<sum;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<sum;i++)
{
if(a[i]%5==0)
{
if(a[i]%2==0)
{
a1+=a[i];
}
}
if(a[i]%5==1)
{
flag++;
if(flag%2!=0)
{
a2+=a[i];a2_flag=1;
}
else
{
a2-=a[i];a2_flag=1;
}
}
if(a[i]%5==2)
{
a3++;
}
if(a[i]%5==3)
{
j1++;
a4+=a[i];
}
if(a[i]%5==4)
{
if(a5<=i)
a5=a[i];
}
}
if(a1!=0)
printf("%d ",a1);
else
printf("N ");
if(a2_flag!=0)
printf("%d ",a2);
else
printf("N ");
if(a3!=0)
printf("%d ",a3);
else
printf("N ");
if(a4!=0)
printf("%.1f ",a4/j1);
else
printf("N ");
if(a5!=0)
printf("%d",a5);
else
printf("N");
}
1014 福尔摩斯的约会
#include<stdio.h>
#include<string.h>
char days[7][10]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int main()
{
int sign=0;
char message[4][61];
long lengthFirst=0;
long lengthSecond=0;
for(int i=0;i<4;i++)
{
scanf("%s",message[i]);
}
lengthFirst=strlen(message[0]);
if(strlen(message[1])<strlen(message[0])){
lengthFirst=strlen(message[1]);
}
lengthSecond=strlen(message[2]);
if(strlen(message[3])<strlen(message[2])){
lengthSecond=strlen(message[3]);
}
for(int i=0;i<lengthFirst;i++)
{
if(message[0][i]==message[1][i]){
if(sign==0){
if(message[0][i]>='A'&&message[0][i]<='G')
{
printf("%s ",days[message[0][i]-'A']);
sign++;
}
}
else if(sign==1){
if(message[0][i]>='0'&&message[0][i]<='9'){
printf("%02d",message[0][i]-48);
break;
}
else if(message[0][i]>='A'&&message[0][i]<='N')
{
printf("%02d",message[0][i]-'A'+10);
break;
}
}
}
}
for(int i=0;i<lengthSecond;i++)
{
if(message[2][i]==message[3][i]){
if(message[2][i]>='A'&&message[2][i]<='z'){
printf(":%02d\n",i);
break;
}
}
}
return 0;
}
1016 部分A+B
#include<stdio.h>
int main()
{
int Da,Db,Pa=0,Pb=0,i=0,j=0;;
char A[100],B[100];
scanf("%s%d%s%d",A,&Da,B,&Db);
while(A[i]!='\0')
{
if(((int)A[i]-48)==Da)
{
Pa=Pa*10+((int)A[i]-48);
}
i++;
}
while(B[j]!=0)
{
if(((int)B[j]-48)==Db)
{
Pb=Pb*10+((int)B[j]-48);
}
j++;
}
printf("%d",Pa+Pb);
}
1017 A除以B
#include<stdio.h>
#include<string.h>
int main()
{
int B,i=0,j=0,sum,num=0,flag=0;
char A[1000];
scanf("%s%d",A,&B);
sum=strlen(A);
for(i=0;i<sum;i++)
{
num=num*10+(int)A[i]-48;
if(num>=B)
{
printf("%d",num/B);
flag=1;
}
else if(i>0&&num<B) //i>0是因为去掉第一个数字大于B的情况
{
printf("0");
}
num=num%B;
}
if(flag==0)//当A小于B的时候
printf("0");
printf(" %d",num);
}
1018 锤子剪刀布
#include<stdio.h>
int main()
{
int N,a11=0,a12=0,a13=0,a2=0,a3=0,b11=0,b12=0,b13=0,b2=0,b3=0;
scanf("%d",&N);
getchar();
char A[100000],B[100000];
for(int i=0;i<N;i++)
{
scanf("%c %c",&A[i],&B[i]);
getchar();
}
for(int i=0;i<N;i++)
{
if(A[i]=='C'&&B[i]=='J')
{
a11++;b3++;
}
else if(A[i]=='B'&&B[i]=='C')
{
a12++;b3++;
}
else if(A[i]=='J'&&B[i]=='B')
{
a13++;b3++;
}
else if(A[i]==B[i])
{
a2++;b2++;
}
else if(A[i]=='J'&&B[i]=='C')
{
a3++;b11++;
}
else if(A[i]=='B'&&B[i]=='J')
{
a3++;b12++;
}
else if(A[i]=='C'&&B[i]=='B')
{
a3++;b13++;
}
}
printf("%d %d %d\n%d %d %d\n",a11+a12+a13,a2,a3,b11+b12+b13,b2,b3);
if(a11>=a13&&a11>a12)
printf("C ");
else if(a13>a11&&a13>a12)
printf("J ");
else
printf("B ");
if(b11>=b12&&b11>b13)
printf("C");
else if(b12>b11&&b12>b13)
printf("J");
else
printf("B");
return 0;
}
1019 数字黑洞
1、0000的输出
2、6174的输出(测试点6)
#include<stdio.h>
int main()
{
int N,n[4],t1=0,t2=0,temp=0;
scanf("%d",&N);
if(N==0)
{
printf("0000 - 0000 = 0000\n");
}
if(N==6174)
{
printf("7641 - 1467 = 6174\n");
}
while(N!=6174&&N!=0)
{
t1=0;t2=0;
for(int i=3;i>=0;i--)
{
n[i]=N%10;
N/=10;
}
for(int i=0;i<3;i++)
{
for(int j=0;j<3-i;j++)
{
if(n[j]<n[j+1])
{
temp=n[j];n[j]=n[j+1];n[j+1]=temp;
}
}
}
for(int i=0,j=3;i<4;i++)
{
t1=t1*10+n[i];
t2=t2*10+n[j--];
}
printf("%04d - %04d = %04d\n",t1,t2,t1-t2);
N=t1-t2;
}
return 0;
}
1021 个位数统计
#include<stdio.h>
int main()
{
int sum=0,num[100]={0};
char n[1000];
scanf("%s",n);
while(n[sum]!='\0')
{
sum++;
}
int kd;
for(int i=0;i<sum;i++)
{
kd=(int)n[i]-48;
num[kd]++;
}
for(int i=0;i<10;i++)
{
if(num[i]!=0)
printf("%d:%d\n",i,num[i]);
}
return 0;
}
1022 D进制的A+B
#include<stdio.h>
int main()
{
long A,B,sum;
int C,a[100],i=0,s;
scanf("%ld%ld%d",&A,&B,&C);
sum=A+B;
if(sum==0)
printf("0");
while(sum!=0)
{
a[i++]=sum%C;
sum/=C;
s=i;
}
for(int i=s-1;i>=0;i--)
{
printf("%d",a[i]);
}
return 0;
}
1023 组个最小数
#include<stdio.h>
int main()
{
int a[10],b[100],sum=0;
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(int i=1,j=1;i<10;i++)
{
if(a[i]!=0)
{
for(int t=0;t<a[i];t++)
{
b[j++]=i;
sum=j;
}
}
b[0]=a[0];
}
if(b[0]==0)
{
for(int i=1;i<sum;i++)
{
printf("%d",b[i]);
}
}
else
{
printf("%d",b[1]);
for(int i=0;i<b[0];i++)
{
printf("0");
}
for(int j=2;j<sum;j++)
{
printf("%d",b[j]);
}
}
return 0;
}
1015 德才论(未通过)
答案是错的,回看代码,就像写了一堆破烂,日后修改
#include<stdio.h>
typedef struct
{
long sno;
int de;
int cai;
int sum;
int flag;
}student;
void paixu(student *p,int *a)
{
int temp;long temp1;
for(int i=0;i<*a;i++)
{
for(int j=0;j<*a-i-1;j++)
{
if(p[j].sum==p[j+1].sum)
{
if(p[j].de<p[j+1].de)
{
temp=p[j].sum;p[j].sum=p[j+1].sum;p[j+1].sum=temp;
temp=p[j].de;p[j].de=p[j+1].de;p[j+1].de=temp;
temp=p[j].cai;p[j].cai=p[j+1].cai;p[j+1].cai=temp;
temp1=p[j].sno;p[j].sno=p[j+1].sno;p[j+1].sno=temp1;
}
if(p[j].de==p[j+1].de)
{
if(p[j].sno<p[j+1].sno)
{
temp=p[j].sum;p[j].sum=p[j+1].sum;p[j+1].sum=temp;
temp=p[j].de;p[j].de=p[j+1].de;p[j+1].de=temp;
temp=p[j].cai;p[j].cai=p[j+1].cai;p[j+1].cai=temp;
temp1=p[j].sno;p[j].sno=p[j+1].sno;p[j+1].sno=temp1; }
}
}
if(p[j].sum<p[j+1].sum)
{
temp=p[j].sum;p[j].sum=p[j+1].sum;p[j+1].sum=temp;
temp=p[j].de;p[j].de=p[j+1].de;p[j+1].de=temp;
temp=p[j].cai;p[j].cai=p[j+1].cai;p[j+1].cai=temp;
temp1=p[j].sno;p[j].sno=p[j+1].sno;p[j+1].sno=temp1;
}
}
}
}
int main()
{
printf("dksjf\n");
int N,L,H;
scanf("%d%d%d",&N,&L,&H);
student stu[N],one[N],two[N],three[N],four[N];
int t4=0,t1=0,t2=0,t3=0;
for(int i=0;i<N;i++)
{
scanf("%ld%d%d",&stu[i].sno,&stu[i].de,&stu[i].cai);
}
for(int i=0;i<N;i++)
{
stu[i].sum=stu[i].de+stu[i].cai;
if(stu[i].de>=H&&stu[i].cai>=H)
{
one[t1].sum=stu[i].sum;
one[t1].sno=stu[i].sno;one[t1].de=stu[i].de;one[t1].cai=stu[i].cai;
t1++;
}
else if(stu[i].de>=L&&stu[i].de<H&&stu[i].cai>=L&&stu[i].cai<H&&stu[i].de>=stu[i].cai)
{
three[t3].sum=stu[i].sum;
three[t3].sno=stu[i].sno;three[t3].de=stu[i].de;three[t3].cai=stu[i].cai;
t3++;
}
else if(stu[i].de>=H&&stu[i].cai>=L&&stu[i].cai<H)
{
two[t2].sum=stu[i].sum;
two[t2].sno=stu[i].sno;two[t2].de=stu[i].de;two[t2].cai=stu[i].cai;
t2++;
}
else if(stu[i].de>=L&&stu[i].cai>=L&&stu[i].de<H&&stu[i].de<stu[i].cai)
{
four[t4].sum=stu[i].sum;
four[t4].sno=stu[i].sno;four[t4].de=stu[i].de;four[t4].cai=stu[i].cai;
t4++;
}
}
paixu(one,&t1);
paixu(two,&t2);
paixu(three,&t3);
paixu(four,&t4);
printf("%d\n",t1+t2+t3+t4);
if(t1!=0)
{
for(int j=0;j<t1;j++)
{
printf("%ld %d %d\n",one[j].sno,one[j].de,one[j].cai);
}
}
if(t2!=0)
{
for(int i=0;i<t2;i++)
{
printf("%ld %d %d\n",two[i].sno,two[i].de,two[i].cai);
}
}
if(t3!=0)
{
for(int i=0;i<t3;i++)
{
printf("%ld %d %d\n",three[i].sno,three[i].de,three[i].cai);
}
}
if(t4!=0)
{
for(int i=0;i<t4;i++)
{
printf("%ld %d %d\n",four[i].sno,four[i].de,four[i].cai);
}
}
return 0;
}
1020 月饼
测试点2:库存量不是整数的情况
#include<stdio.h>
int main()
{
int N,D;
double b[1000],temp1,a[1000][2],temp[1][3];
scanf("%d%d",&N,&D);
for(int i=0;i<N;i++)
{
scanf("%lf",&a[i][0]);
}
for(int i=0;i<N;i++)
{
scanf("%lf",&a[i][1]);
}
//求单价
for(int i=0;i<N;i++)
{
b[i]=a[i][1]/a[1][0];
}
//按单价排序
for(int i=0;i<N;i++)
{
for(int j=0;j<N-i-1;j++)
{
if(b[j]<b[j+1])
{
temp1=b[j];b[j]=b[j+1];b[j+1]=temp1;
for(int t=0;t<2;t++)
{
temp[0][t]=a[j][t];
a[j][t]=a[j+1][t];
a[j+1][t]=temp[0][t];
}
}
}
}
int t=0,D1;
double sum=0,num1=D;
D1=D;
for(int i=0;i<N;i++)
{
t++;
D1-=a[i][0];
if(D1<=0)
{
break;
}
}
for(int i=0;i<t;i++)
{
if(i!=t-1)
{
sum+=a[i][1];
}
else
{
if(num1<=a[i][0])
sum+=num1*b[i];
else
sum+=a[i][1];
}
num1-=a[i][0];
}
printf("%.2lf",sum);
return 0;
}
1024 科学计数法
百般调试下,终于做对了,代码比较长,懒得改了
推荐测试点
- -1.2E+9999(测试点6)
- -1000.0E05(测试点3,5)
- +0.1E-1(测试点4)
#include<stdio.h>
int main()
{
char num[10000],new_num[10000];
scanf("%s",num);
int dian=0,jian=0,E=0,i=0,ling=0;
while(num[i]!='\0')
{
if(num[i]=='.')
dian=i;
if(num[i]=='E')
E=i;
if(num[i]=='-')
jian=i;
i++;
}
int j=E+1,total=0;
while(num[j]!='\0')
{
if(num[j]!='-'&&num[j]!='+')
total=total*10+(int)num[j]-48;
j++;
}
if(jian>0)
{
if(dian-total>1)
{
for(int i=0;i<=dian-total;i++)
{
if(num[i]!='+')
printf("%c",num[i]);
}
if((dian+total)+1!=E)
printf(".");
for(int i=dian-total+1;i<E;i++)
{
if(num[i]!='.')
printf("%c",num[i]);
}
}
else
{
if(num[0]=='-')
printf("-");
printf("0.");
for(int i=0;i<total-dian+1;i++)
{
printf("0");
}
for(int i=1;i<E;i++)
{
if(num[i]!=1&&num[i]!='.')
{
printf("%c",num[i]);
}
}
}
}
else
{
int j=0,sum=0;
if(dian+total+1<E)
{
for(int i=0;i<=dian+total;i++)
{
if(num[i]!='+'&&num[i]!='.'&&num[i]!='-')
new_num[j++]=num[i];
}
for(int i=0;i<j;i++)
{
sum=sum*10+(int)new_num[i]-48;
}
if(num[0]=='-')
printf("-");
printf("%d",sum);
if((dian+total)!=E)
printf(".");
for(int i=dian+total+1;i<E;i++)
{
printf("%c",num[i]);
}
}
else
{
for(int i=0;i<E;i++)
{
for(int i=1;i<E;i++)
{
if(num[i]=='0')
{
ling++;
}
}
if(ling==dian-1)
{
if(num[i]!='+'&&num[i]!='.'&&num[i]!='0')
printf("%c",num[i]);
}
else
{
if(num[i]!='+'&&num[i]!='.')
printf("%c",num[i]);
}
}
for(int i=0;i<dian+total-E+1;i++)
{
printf("0");
}
}
}
return 0;
}
1027 打印沙漏
#include<stdio.h>
int main()
{
int N;
char ch;
scanf("%d %c",&N,&ch);
//计算图形折叠后的高度t
int sum=0,t=0;;
for(int i=1;;i++)
{
sum+=4*i-2;
if(sum-1>N)
{
t=i-1;break;
}
if(sum-1==N)
{
t=i;break;
}
}
//统计图形所用符号个数
sum=0;
for(int i=1;i<=t;i++)
{
sum+=4*i-2;
}
//打印上半部分
for(int i=t;i>=2;i--)
{
for(int j=t;j>i;j--)
{
printf(" ");
}
for(int h=0;h<2*i-1;h++)
{
printf("%c",ch);
}
printf("\n");
}
//打印下半部分
for(int i=1;i<=t;i++)
{
for(int j=t;j>i;j--)
{
printf(" ");
}
for(int h=0;h<2*i-1;h++)
{
printf("%c",ch);
}
printf("\n");
}
printf("%d\n",N-(sum-1));
return 0;
}
1028 人口普查
1、当合理个数为0时,不输出姓名(测试点3)
1、结构题数组的长度改为100010就不会出现段错误(测试点4)
#include<stdio.h>
#include<string.h>
typedef struct
{
char name[100];
int year;
int month;
int day;
int age;
}PERSON;
int main()
{
int N,sum=0,temp,min=0,max=0;
PERSON stu[100010],stu1[100010];
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%s%d/%d/%d",stu[i].name,&stu[i].year,&stu[i].month,&stu[i].day);
}
//找出合理生日
for(int i=0;i<N;i++)
{
stu[i].age=(2014-stu[i].year-1)*372+(12-stu[i].month-1)*31+(31-stu[i].day)+285;
if(stu[i].age>=0&&stu[i].age<=74400)
{
strcpy(stu1[sum].name,stu[i].name);
stu1[sum].year=stu[i].year;
stu1[sum].month=stu[i].month;
stu1[sum].day=stu[i].day;
stu1[sum].age=stu[i].age;
if(stu1[min].age>stu1[sum].age)//找年龄最小的
min=sum;
if(stu1[max].age<stu1[sum].age)//找年龄最大的
max=sum;
sum++;
}
}
if(sum==0)
printf("0");
else
printf("\n%d %s %s",sum,stu1[max].name,stu1[min].name);
return 0;
}
1029 旧键盘
#include<stdio.h>
int main()
{
char str1[100],str2[100],str3[100],str4[100];
scanf("%s",str1);
scanf("%s",str2);
//标记未坏的键盘
int i=0,j=0;
while(str2[i]!='\0')
{
j=0;
while(str1[j]!=0)
{
if(str2[i]==str1[j]||str2[i]==str1[j]-32)
{
str1[j]='*';
}
j++;
}
i++;
}
//提取好键盘
int t=0;i=0;
while(str1[i]!='\0')
{
if(str1[i]!='*')
{
if(str1[i]>='a'&&str1[i]<='z')
{
str3[t++]=str1[i]-32;
}
else
str3[t++]=str1[i];
}
i++;
}
//去除重复
int s=0,flag=0;
for(int i=0;i<t;i++)
{
flag=0;
for(int j=0;j<s;j++)
{
if(str3[i]==str4[j])
flag=1;
}
if(flag==0)
str4[s++]=str3[i];
}
puts(str4);
return 0;
}
1032 挖掘机技术哪家强
方法1:最后一个测试点运行超时
#include<stdio.h>
int main()
{
int N,n[100000][2],s[10000][2]={0},t2=0,flag=0,max[1][2];
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d%d",&n[i][0],&n[i][1]);
}
for(int i=0;i<N;i++)
{
for(int j=0;j<t2;j++)
{
if(n[i][0]==s[j][0])
{
s[j][1]+=n[i][1];
flag=1;
break;
}
}
if(flag==0)
{
s[t2][0]=n[i][0];
s[t2][1]=n[i][1];
t2++;
}
}
max[0][1]=0;
for(int i=0;i<t2;i++)
{
if(max[0][1]<s[i][1])
{
max[0][0]=s[i][0];
max[0][1]=s[i][1];
}
}
printf("%d %d",max[0][0],max[0][1]);
}
改进:
测试点2:只有一组数据的时候
测试点3:考察数组长度和算法效率
#include<stdio.h>
int main()
{
int N,n[100020][2],s[100020],max[1][2];
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d%d",&n[i][0],&n[i][1]);
s[n[i][0]]+=n[i][1];
}
max[0][1]=-1;
for(int j=0;j<N+1;j++)
{
if(max[0][1]<s[j])
{
max[0][0]=j;
max[0][1]=s[j];
}
}
printf("%d %d",max[0][0],max[0][1]);
return 0;
}
1036 跟奥巴马一起编程
#include<stdio.h>
int main()
{
double a;
char c;
scanf("%lf %c",&a,&c);
for(int i=0;i<a;i++)
{
printf("%c",c);
}
printf("\n");
int m=(int)(a/2+0.5);
for(int i=0;i<m-2;i++)
{
printf("%c",c);
for(int j=0;j<a-2;j++)
{
printf(" ");
}
printf("%c\n",c);
}
for(int i=0;i<a;i++)
{
printf("%c",c);
}
return 0;
}
1033 旧键盘打字(4未通过)
#include<stdio.h>
int main()
{
char bad[130],ch;
gets(bad);
while((ch=getchar())!='\n')
{
int j=0,flag=0;
while(bad[j]!='\0')
{
if((ch==bad[j]||ch==bad[j]+32)||(bad[j]=='+'&&ch>='A'&&ch<='Z'))
{
flag=1;
}
j++;
}
if(flag!=1)
{
putchar(ch);
}
}
printf("\n");
return 0;
}
1034 有理数四则运算
#include<stdio.h>
#include<stdlib.h>
/*求最大公约数*/
long max(long long a,long long b)
{
if(b==0)
return a;
return max(b,a%b);
}
/*输出格式*/
long show(long long a,long long b)
{
if(b==0)
{
printf("Inf");
return 0;
}
else if(b==1)
{
if(a<0)
printf("(%lld)",a);
else
printf("%lld",a);
return 0;
}
long k=a/b;
if(k!=0)
a%=b;
long _max;
_max=max(a,b);
a/=_max;
b/=_max;
if(b<0)
{
a=-a;b=-b;
}
if(a==0)
{
if(k<0)
printf("(%lld)",k);
else
printf("%lld",k);
return 0;
}
if(k==0)
{
if(a<0)
printf("(%lld/%lld)",a,b);
else
printf("%lld/%lld",a,b);
}
else if(k<0)
{
printf("(%lld %lld/%lld)",k,-a,b);
}
else
{
printf("%lld %lld/%lld",k,a,b);
}
return 0;
}
int main()
{
long long a1,b1,a2,b2;
scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2);
show(a1,b1);printf(" + ");show(a2,b2);printf(" = ");show(a1*b2+b1*a2,b1*b2);printf("\n");
show(a1,b1);printf(" - ");show(a2,b2);printf(" = ");show(a1*b2-b1*a2,b1*b2);printf("\n");
show(a1,b1);printf(" * ");show(a2,b2);printf(" = ");show(a1*a2,b1*b2);printf("\n");
show(a1,b1);printf(" / ");show(a2,b2);printf(" = ");show(a1*b2,a2*b1);printf("\n");
return 0;
}
1037 在霍格沃茨找零钱
#include<stdio.h>
int main()
{
long long a,a1,sum1=0,sum2=0,b,c,b1,c1,sum3=0;
scanf("%lld.%lld.%lld %lld.%lld.%lld",&a,&b,&c,&a1,&b1,&c1);
sum1=a*17*29+b*29+c;
sum2=a1*17*29+b1*29+c1;
sum3=sum2-sum1;
if(sum2>=sum1)
printf("%lld.%lld.%lld",sum3/(17*29),(sum3%(17*29))/29,sum3%29);
else
{
sum3=sum1-sum2;
printf("-%lld.%lld.%lld",sum3/(17*29),(sum3%(17*29))/29,sum3%29);
}
return 0;
}
1038 统计同成绩学生
#include<stdio.h>
int main()
{
int N,K,n[100020],k[1000],n1[101]={0};
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d",&n[i]);
n1[n[i]]++;
}
scanf("%d",&K);
for(int i=0;i<K;i++)
{
scanf("%d",&k[i]);
}
for(int i=0;i<K;i++)
{
for(int j=0;j<=100;j++)
{
if(j==k[i])
{
printf("%d",n1[j]);
if(i!=K-1)
printf(" ");
}
}
}
return 0;
}
1039 到底买不买
#include<stdio.h>
int main()
{
char s1[1010],s2[1010];
scanf("%s%s",s1,s2);
int i=0,j=0;
while(s1[i]!='\0')
{
j=0;
while(s2[j]!='\0')
{
if(s1[i]==s2[j])
{
s1[i]='*';
s2[j]='*';
}
j++;
}
i++;
}
int t1=0,t2=0;
i=0;j=0;
while(s2[i]!='\0')
{
if(s2[i]!='*')
{
t1++;
}
i++;
}
if(t1>0)
{
printf("No %d",t1);
}
else
{
while(s1[j]!='\0')
{
if(s1[j]!='*')
{
t2++;
}
j++;
}
printf("Yes %d",t2);
}
return 0;
}
1040 有几个PAT
#include<stdio.h>
int main()
{
char s[100010];
scanf("%s",s);
long i=0,p=0,a=0,pat=0;
while(s[i]!='\0')
{
if(s[i]=='P')
{
p++;
}
else
{
if(s[i]=='A')
{
a+=p;
}
else
{
if(s[i]=='T')
{
pat+=a;
}
}
}
i++;
}
printf("%ld",pat%1000000007);
return 0;
}
1041 考试座位号
#include<stdio.h>
int main()
{
char sno[1010][20];
int s[1010][2],N,M,m[1000];
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%s%d%d",sno[i],&s[i][0],&s[i][1]);
}
scanf("%d",&M);
for(int i=0;i<M;i++)
{
scanf("%d",&m[i]);
}
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
if(m[i]==s[j][0])
{
printf("%s %d\n",sno[j],s[j][1]);
break;
}
}
}
return 0;
}
1042 字符统计
#include<stdio.h>
int main()
{
char str[1010];
gets(str);
int i=0,letter[26]={0};
while(str[i]!='\0')
{
int temp;
if(str[i]>='a'&&str[i]<='z')
{
temp=(int)str[i]-97;
letter[temp]++;
}
else if(str[i]>='A'&&str[i]<='Z')
{
temp=(int)str[i]-65;
letter[temp]++;
}
i++;
}
int max=0,t;
for(int i=0;i<26;i++)
{
if(max<letter[i])
{
t=i;
max=letter[i];
}
}
printf("%c %d",t+97,max);
return 0;
}
1043 输出PATest
#include<stdio.h>
int main()
{
char str[10010];
scanf("%s",str);
int t[6]={0};
int i=0;
while(str[i]!='\0')
{
if(str[i]=='P')
t[0]++;
else if(str[i]=='A')
t[1]++;
else if(str[i]=='T')
t[2]++;
else if(str[i]=='t')
t[5]++;
else if(str[i]=='e')
t[3]++;
else if(str[i]=='s')
t[4]++;
i++;
}
int max=0;
for(int i=0;i<6;i++)
{
if(max<t[i])
max=t[i];
}
int r1,r2,r3,r4,r5,r6;
for(int i=0;i<max;i++)
{
for(r1=i;r1<t[0];r1++)
{
printf("P");
break;
}
for(r2=i;r2<t[1];r2++)
{
printf("A");
break;
}
for(r3=i;r3<t[2];r3++)
{
printf("T");
break;
}
for(r4=i;r4<t[3];r4++)
{
printf("e");
break;
}
for(r5=i;r5<t[4];r5++)
{
printf("s");
break;
}
for(r6=i;r6<t[5];r6++)
{
printf("t");
break;
}
}
return 0;
}
1046 划拳
#include<stdio.h>
int main()
{
int N,n[110][5],sum1=0,sum2=0;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d%d%d%d",&n[i][0],&n[i][1],&n[i][2],&n[i][3]);
if(n[i][1]==n[i][0]+n[i][2]&&n[i][3]!=n[i][0]+n[i][2])
sum2++;
if(n[i][1]!=n[i][0]+n[i][2]&&n[i][3]==n[i][0]+n[i][2])
sum1++;
}
printf("%d %d",sum1,sum2);
return 0;
}
1044 火星数字(未通过)
#include<stdio.h>
#include<string.h>
int main()
{
int N;
char num[100][20],num1[100][20];
char s1[12][4]={{'j','a','n'},{'f','e','b'},{'m','a','r'},{'a','p','r'},{'m','a','y'},{'j','u','n'},{'j','l','y'},
{'a','u','g'},{'s','e','p'},{'o','c','t'},{'n','o','v'},{'d','e','c'}};
char s2[12][4]={{'t','a','m'},{'h','e','l'},{'m','a','a'},{'h','u','h'},{'t','o','u'},{'k','e','s'},{'h','e','i'},
{'e','l','o'},{'s','y','y'},{'l','o','k'},{'m','e','r'},{'j','o','u'}};
scanf("%d",&N);
getchar();
for(int i=0;i<N;i++)
{
gets(num[i]);
}
for(int i=0;i<N;i++)
{
//如果是地球文
int j=0,sum=0,a=0,b=0,c=0;
if(num[i][0]>='0'&&num[i][0]<='9')
{
while(num[i][j]!='\0')
{
sum=sum*10+(int)num[i][j]-48;
j++;
}
a=sum/13;
strcpy(num1[i],s2[a-1]);
b=sum%13;
if(b!=0)
{
if(a==0)
{
//strcat(num1[i],s1[b-1]);
num1[i][3]=s1[b-1][0];num1[i][4]=s1[b-1][1];num1[i][5]=s1[b-1][2];
}
else
{
num1[i][3]=' ';
//strcat(num1[i],s1[b-1]);
num1[i][4]=s1[b-1][0];num1[i][5]=s1[b-1][1];num1[i][5]=s1[b-1][2];
}
}
}
//如果是火星文
else
{
int flag=0,flag1=0;
a=0;b=0;c=0;
for(int z=0;z<12;z++)
{
if(num[i][0]==s2[z][0]&&num[i][1]==s2[z][1]&&num[i][2]==s2[z][2])
{
flag=1;
a=z;
}
if((num[i][4]==s1[z][0]&&num[i][5]==s1[z][1]&&num[i][6]==s1[z][2])||(num[i][0]==s1[z][0]&&num[i][1]==s1[z][1]&&num[i][2]==s1[z][2]))
{
flag1=1;
b=z;
}
}
if(flag==1&&flag1==1)
{
c=(a+1)*13+b+1;
if(c<100)
{
num1[i][0]=(char)(c/10+48);
num1[i][1]=(char)(c%10+48);
}
else{
num1[i][0]=(char)(c/100+48);
c=c%100;
num1[i][1]=(char)(c/10+48);
num1[i][2]=(char)(c%10+48);
}
}
if(flag==1&&flag1!=1)
{
c=13+a;
num1[i][0]=(char)(c/10+48);
num1[i][1]=(char)(c%10+48);
}
if(flag!=1&&flag1==1)
{
c=b+1;
if(c<10)
{
num1[i][0]=(char)(c+48);
}
else
{
num1[i][0]=(char)(c/10+48);
num1[i][1]=(char)(c%10+48);
}
}
}
}
for(int i=0;i<N;i++)
{
puts(num1[i]);
}
return 0;
}
1047 编程团体赛
#include<stdio.h>
int main()
{
int N,n[1010]={0},t,s,z;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d-%d %d",&t,&z,&s);
n[t]+=s;
}
int max=-1,q=0;
for(int i=0;i<1010;i++)
{
if(max<n[i])
{
q=i;
max=n[i];
}
}
printf("%d %d",q,max);
return 0;
}