-1001 害死人不偿命的(3n+1)猜想(15)
#include<stdio.h>
int main()
{
int n;
int step=0;
scanf("%d",&n);
while(n!=1)
{
if(n%2==1)
n=(3*n+1)/2;
else
n/=2;
step+=1;
}
printf("%d",step);
}
-1002 写出这个数(20)
#include<stdio.h>
#include<string.h>
int main()
{
char s[100];
scanf("%s",s);
int i=0;
int sum = 0;
int new_sum[5];
while(s[i]!=NULL)
{
sum+=(int)s[i]-48;
i+=1;
}
if(sum==0)
{
printf("ling");
return 0;
}
i=0;
while(sum>=1)
{
new_sum[i]=sum%10;
//printf("%d\n",new_sum[i]);
sum/=10;
i+=1;
}
i--;
while(i>=0)
{
//printf("%d\n",new_sum[i]);
switch(new_sum[i])
{
case 1:printf("yi");break;
case 2:printf("er");break;
case 3:printf("san");break;
case 4:printf("si");break;
case 5:printf("wu");break;
case 6:printf("liu");break;
case 7:printf("qi");break;
case 8:printf("ba");break;
case 9:printf("jiu");break;
case 0:printf("ling");break;
}
i-=1;
if(i>=0)
printf(" ");
}
return 0;
}
第二个点测试的是倒序以后末尾的0会不会丢掉
-1004 成绩排名(20)
#include<stdio.h>
int main()
{
int n;
char* a[2];
char* c[2];
int b[2];
b[0]=0;
b[1]=100;
int score;
int i;
scanf("%d",&n);
char name[n][50],class[n][50];
for(i=0;i<n;i++)
{
scanf("%s %s %d",&name[i],&class[i],&score);
if(score>=b[0])
{
a[0]=name[i];
a[1]=class[i];
b[0]=score;
}
if(score<=b[1])
{
c[0]=name[i];
c[1]=class[i];
b[1]=score;
}
}
printf("%s %s\n",a[0],a[1]);
printf("%s %s\n",c[0],c[1]);
}
这个解法不够优雅,不过能过…
-1006 换个格式输出整数(15)
#include<stdio.h>
int main()
{
int n,i,u=0,set=2;
int num[3]={0,0,0};
scanf("%d",&n);
while(n>=1)
{
num[set--]=n%10;
n/=10;
}
for(i=0;i<num[0];i++)
printf("B");
for(i=0;i<num[1];i++)
printf("S");
for(i=1;i<=num[2];i++)
printf("%d",i);
}
这个解法我是满意的
-1007 素数对猜想(20)
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,k=0,sum=0;
scanf("%d",&n);
int result[1000];
for(j=1;j<=n;j++)
{
int flag=1;
for(i=2;i<=sqrt(j);i++)
if(j%i==0)
{
flag=0;
break;
}
if(flag==1)
result[k++]=j;
}
// for(i=0;i<k;i++)
// printf("%d ",result[i]);
for(i=0;i<k-1;i++)
{
if(result[i]+2==result[i+1])
sum+=1;
}
printf("%d",sum);
}
点5段错误,应该是因为两个for的复杂度太高,需要用素数判断算法把偶数都删除会比较简单
不过暂时不准备改
-1009 说反话(20)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s[81];
const char * split = " ";
char *result=NULL;
char words[81][81];
int i=0,j=0;
gets(s);
result=strtok(s, split);
// strcpy(words[j++],result);
while(result!=NULL)
{
strcpy(words[j++],result);
result=strtok(NULL, split);
// printf("%s",words[j-1]);
}
while(j>=1)
{
printf("%s",words[--j]);
if(j!=0)
printf(" ");
}
}
一定要注意字符串最后留一个空格给\0
-1011 A+B和C(15)
#include<stdio.h>
int main()
{
int T = 0;
long long a,b,c;
int i;
scanf("%d",&T);
for(i=1;i<=T;i++)
{
scanf("%lld %lld %lld",&a,&b,&c);
//printf("%f %f %f",a,b,c);
if(a+b>c)
printf("Case #%d: true\n",i);
else
printf("Case #%d: false\n",i);
}
}
-1015 德才论(25)
#include <stdio.h>
#include <stdlib.h>
int compare(int* a, int* b)
{
if(((int)a[2]+(int)a[1])==((int)b[1]+(int)b[2])&&(int)a[1]==(int)b[1])
return (int)a[0]-(int)b[0];//总分德分都相同
else if((int)a[2]+(int)a[1]==(int)b[1]+(int)b[2])
return (int)b[1]-(int)a[1];//总分相同
else
return (int)b[1]+(int)b[2]-(int)a[2]+(int)a[1];
}
int main(int argc, const char * argv[]) {
int N,L,H,M=0;
scanf("%d %d %d",&N,&L,&H);
int A[105][3],B[105][3],C[105][3],D[105][3];
int i,a=0,b=0,c=0,d=0;
int number,de,cai;
for(i=0;i<N;i++)
{
scanf("%d %d %d",&number,&de,&cai);
//A[i][1],A[i][2],A[i][3]
if(de>=H&&cai>=H)
{
A[a][0]=number;
A[a][1]=de;
A[a][2]=cai;
a+=1;
M+=1;
}
else if(de>=H&&cai>=L)
{
B[b][0]=number;
B[b][1]=de;
B[b][2]=cai;
b+=1;
M+=1;
}
else if(de>=L&&cai>=L&&de>=cai)
{
C[c][0]=number;
C[c][1]=de;
C[c][2]=cai;
c+=1;
M+=1;
}
else if(de>=L&&cai>=L)
{
D[d][0]=number;
D[d][1]=de;
D[d][2]=cai;
d+=1;
M+=1;
}
}
qsort(A, a, sizeof(A[0]), compare);
qsort(B, b, sizeof(B[0]), compare);
qsort(C, c, sizeof(C[0]), compare);
qsort(D, d, sizeof(D[0]), compare);
printf("%d\n",M);
for(i=0;i<a;i++)
printf("%d %d %d\n",A[i][0],A[i][1],A[i][2]);
for(i=0;i<b;i++)
printf("%d %d %d\n",B[i][0],B[i][1],B[i][2]);
for(i=0;i<c;i++)
printf("%d %d %d\n",C[i][0],C[i][1],C[i][2]);
for(i=0;i<d;i++)
printf("%d %d %d\n",D[i][0],D[i][1],D[i][2]);
return 0;
}
2 3 4三个点段错误…
-1016 部分A+B(15)
#include<stdio.h>
int main()
{
int A,B,Da,Db;
scanf("%d %d %d %d",&A,&Da,&B,&Db);
int Pa=0,Pb=0,a,b;
while(A>=1)
{
a=A%10;
if(a==Da)
{
Pa*=10;
Pa+=a;
}
A/=10;
}
while(B>=1)
{
b=B%10;
if(b==Db)
{
Pb*=10;
Pb+=b;
}
B/=10;
}
printf("%d",Pa+Pb);
}
-1018 锤子剪刀布(20)
#include <stdio.h>
#include <string.h>
int max(int x,int y) { if ( x>y ) return x; else return y; }
int main()
{
int n,i,j = 0,k;
scanf("%d",&n);
int a[3]={0,0,0},b[3]={0,0,0};//胜负平
int aa[3]={0,0,0},ba[3]={0,0,0};//CBJ次数
char ac[2],bc[2];
char stand1[]={"C"};
char stand2[]={"J"};
char stand3[]={"B"};
int result[3];
for(i=0;i<n;i++)
{
scanf("%s %s",ac,bc);
if(strcmp(ac,stand1)==0)
{
switch (bc[0]) {
case 'B':
b[0]+=1;
a[2]+=1;
ba[2]+=1;
break;
case 'C':
b[1]+=1;
a[1]+=1;
break;
case 'J':
a[0]+=1;
b[2]+=1;
aa[0]+=1;
break;
default:
break;
}
continue;
}
if(strcmp(ac,stand3)==0)
{
switch ((int)bc[0]) {
case 'J':
b[0]+=1;
a[2]+=1;
ba[1]+=1;
break;
case 'B':
b[1]+=1;
a[1]+=1;
break;
case 'C':
a[0]+=1;
b[2]+=1;
aa[2]+=1;
break;
default:
break;
}
continue;
}
if(strcmp(ac,stand2)==0)
{
switch ((int)bc[0]) {
case 'C':
b[0]+=1;
a[2]+=1;
ba[0]+=1;
break;
case 'J':
b[1]+=1;
a[1]+=1;
break;
case 'B':
a[0]+=1;
b[2]+=1;
aa[1]+=1;
break;
default:
break;
}
continue;
}
}
for(i=0;i<3;i++)
{
printf("%d",a[i]);
if(i<2)
printf(" ");
}
printf("\n");
for(i=0;i<3;i++)
{
printf("%d",b[i]);
if(i<2)
printf(" ");
}
printf("\n");
// for(i=0;i<3;i++)
// {
// printf("%d",aa[i]);
// if(i<2)
// printf(" ");
// }
// printf("\n");
// for(i=0;i<3;i++)
// {
// printf("%d",ba[i]);
// if(i<2)
// printf(" ");
// }
// printf("\n");
// aa[0]>aa[1]?(aa[0]>aa[2]?printf("C "):printf("J ")):(aa[1]>aa[2]?printf("B "):printf("J "));
// ba[0]>ba[1]?(ba[0]>ba[2]?printf("C\n"):printf("J\n")):(ba[1]>ba[2]?printf("B\n"):printf("J\n"));
// 三目运算符太复杂了 还是max比较简洁
k=max(max(aa[0],aa[1]),aa[2]);
// printf("%d",k);
for(i=0;i<3;i++)
{
j=0;
if(aa[2]==k)
{
if(j)
printf(" ");
printf("B");
j+=1;
break;
}
if(aa[0]==k)
{
if(j)
printf(" ");
printf("C");
j+=1;
break;
}
if(aa[1]==k)
{
if(j)
printf(" ");
printf("J");
j+=1;
break;
}
}
k=max(max(ba[0],ba[1]),ba[2]);
// printf("%d",k);
for(i=0;i<3;i++)
{
if(ba[2]==k)
{
if(j)
printf(" ");
printf("B");
j+=1;
break;
}
if(ba[0]==k)
{
if(j)
printf(" ");
printf("C");
j+=1;
break;
}
if(ba[1]==k)
{
if(j)
printf(" ");
printf("J");
j+=1;
break;
}
}
}
程序还可以优化
-1020 月饼(25)
#include <stdio.h>
#include <stdlib.h>
typedef struct good* Good;
struct good{
double price;
double amount;
};
int comp(const void *a,const void *b)
{
return (int)(((Good)b)->price*10) - (int)(((Good)a)->price*10);
}
int main()
{
int n;
double d;
scanf("%d %lf",&n,&d);
Good p;
double sum=0;
p = (Good) malloc(sizeof(struct good) * n);
for(int i=0;i<n;i++)
scanf("%lf",&p[i].amount);
for(int i=0;i<n;i++)
scanf("%lf",&p[i].price);
for(int i=0;i<n;i++)
p[i].price=p[i].price/p[i].amount;
qsort(p,n,sizeof(p[0]),comp);
// for(int i=0;i<n;i++)
// printf("%lf",p[i].price);
int i=0;
while(d>0)
{
sum+=(p[i].amount>=d?d:p[i].amount)*p[i].price;
d-=p[i].amount>=d?d:p[i].amount;
i+=1;
if(i>n-1)
break;
// printf("%lf\n",d);
}
printf("%.2f",sum);
}
点3注意库存没了的情况
-1021 个位数统计(15)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i=0;
char s[1000];
int sum[10]={0,0,0,0,0,0,0,0,0,0};
scanf("%s",s);
while(s[i]!='\0')
{
sum[(int)s[i]-48]+=1;
i+=1;
}
for(i=0;i<10;i++)
{
if(sum[i]!=0)
printf("%d:%d\n",i,sum[i]);
}
}
-1023 组个最小数(20)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int number[10];
int i=1,j;
for(j=0;j<10;j++)
scanf("%d",&number[j]);
while(number[i]==0)
i++;
printf("%d",i);
number[i]-=1;
for(i=0;i<=9;i++)
{
while(number[i]!=0)
{
printf("%d",i);
number[i]-=1;
}
}
}
-1025 反转链表(25)
#include<stdio.h>
#include<stdlib.h>
typedef struct node *List;
struct node
{
int address;
int num;
// int next_add;
List next;
};
int N;
List L[100000];
List create()
{
List head;
head=NULL;
return head;
}
//List add_element(List list)
//{
// for (int i=0; i<N; i+=1) {
// for (int j=i; j<N; j+=1) {
// if(L[i]->next_add==L[j]->address)
// L[i]->next=L[j];
// }
// }
//}
int main()
{
int first_ad,K;
scanf("%d %d %d",&first_ad,&N,&K);
int address,data,next;
for(int i=0;i<100000;i+=1)
L[i]=malloc(sizeof(struct node));
List head;
head=malloc(sizeof(struct node));
// List L[N];
head->next=L[first_ad];
for (int i=0; i<N; i+=1) {
scanf("%d %d %d",&address,&data,&next);
// List newnode;
// if(address!=first_ad)
// L[address]=malloc(sizeof(struct node));
// L[i]->address=address;
L[address]->address=address;
L[address]->num=data;
if(next!=-1)
L[address]->next=L[next];
else
L[address]->next=NULL;
// L=add_element(L,newnode);
}
// List list;
// list=create();
// list=add_element(list);
List current,present;
current=malloc(sizeof(struct node));
present=malloc(sizeof(struct node));
current=head->next;
for (int i=0; i<K-1; i+=1) {
// present=current->next->next;
present =current->next->next;
// printf("%d ",present->num);
// current->next=present->next;
current->next->next=head->next;
head->next=current->next;
current->next=present;
// printf("%d",head->next->num);
// printf("%d\n",current->num);
}
current=head->next;
for (int i=0; i<N; i+=1) {
printf("%05d ",current->address);
printf("%d ",current->num);
if(current->next!=NULL)
printf("%05d\n",current->next->address);
else
printf("-1\n");
current=current->next;
}
}
没有过的点是因为没有做多个反复的循环
-1026 程序运行时间(15)
#include<stdio.h>
#define CLK_TCK 100
int main()
{
int a,b;
int time,hour,minute,second;
scanf("%d %d",&a,&b);
time=(int)((b-a+50)/100);
hour=time/3600;
minute=(time-3600*hour)/60;
second=time-3600*hour-60*minute;
printf("%02d:%02d:%02d",hour,minute,second);
}
(int)(a+0.5)是四舍五入的好方法
-1027 打印沙漏(20)
#include<stdio.h>
#include<math.h>
int main()
{
int x;//x is the number of layers except the centre in single site
int n;//n is the total number which are unsigned
int N;//N is the total number offered
int a,b;
char ch;
scanf("%d %c",&N,&ch);
x = sqrt((N+1.0)/2)-1;
for(a=x;a>0;a--)
{
for(b=0;b<x-a;b++)
printf(" ");
for(b=2*a+1;b>0;b--)
printf("%c",ch);
printf("\n");
}
for(a=0;a<=x;a++)
{
for(b=0;b<x-a;b++)
printf(" ");
for(b=2*a+1;b>0;b--)
printf("%c",ch);
printf("\n");
}
n=N-(2*x*x+4*x+1);
printf("%d\n",n);
return 0;
}
-1028 人口普查(20)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(int* a, int* b)
{
if(((int)a[0]==(int)b[0])&&(int)a[1]==(int)b[1])
return (int)a[2]-(int)b[2];
else if((int)a[0]==(int)b[0])
return (int)a[1]-(int)b[1];
else
return (int)a[0]-(int)b[0];
}
int main(int argc, const char * argv[]) {
int N,M=0;
scanf("%d",&N);
int A[N][4];
int i,a=0;
//char year[5],month[3],day[3];
int year1,month1,day1;
char all[20];
char people[10];
char name[N][10];
const char * split = "/";
char *result=NULL;
//char *outer_ptr = NULL;
for(i=0;i<N;i++)
{
scanf("%s %s",people,all);
//printf("%s %s %s %s",people,year,month,day);
result=strtok(all, split);
year1=atoi(result);
result=strtok(NULL, split);
month1=atoi(result);
result=strtok(NULL, split);
day1=atoi(result);
if((year1>1814&&year1<2014)||(year1==1814&&month1>9)||(year1==2014&&month1<9)||(year1==1814&&month1==9&&day1>=6)||(year1==2014&&month1==9&&day1<=6))
{
A[a][0]=year1;
A[a][1]=month1;
A[a][2]=day1;
A[a][3]=a;
strcpy(name[a],people);
a+=1;
M+=1;
}
}
qsort(A, a, sizeof(A[0]), compare);
printf("%d ",M);
printf("%s %s\n",name[A[0][3]],name[A[a-1][3]]);
return 0;
}
点3段错误 懒得改了…下次补充strtok用法…
-1029 旧键盘(20)
#include<stdio.h>
int main()
{
char s[81];
char standard[81];
char wrong[81];
scanf("%s",standard);
scanf("%s",s);
int k;
int stack_s=0,stack_standard=0,stack_wrong=0;
while(standard[stack_standard]!='\0')
{
if(standard[stack_standard]!=s[stack_s])
{
for(k=0;k<stack_wrong;k+=1)
if(wrong[k]==standard[stack_standard]||wrong[k]==standard[stack_standard]-32)
break;
//当已经录入
if(k==stack_wrong&&(standard[stack_standard]>='a'&&standard[stack_standard]<='z'))
wrong[stack_wrong++]=standard[stack_standard]-32;
else if(k==stack_wrong)
wrong[stack_wrong++]=standard[stack_standard];
//当尚未录入
stack_standard+=1;
}
else
{
stack_s+=1;
stack_standard+=1;
}
}
for(int i=0;i<stack_wrong;i+=1)
printf("%c",wrong[i]);
}
点1过不了
-1029 旧键盘(20) 另一种正确做法
#include<stdio.h>
int main()
{
char s[81];
char standard[81];
char wrong[81];
scanf("%s",standard);
scanf("%s",s);
int k;
int stack_s=0,stack_standard=0,stack_wrong=0;
while(standard[stack_standard]!='\0')
{
if(standard[stack_standard]!=s[stack_s])
{ if((standard[stack_standard]>='a'&&standard[stack_standard]<='z'))
wrong[stack_wrong++]=standard[stack_standard]-32;
else
wrong[stack_wrong++]=standard[stack_standard];
stack_standard+=1;
}
else
{
stack_s+=1;
stack_standard+=1;
}
}
for(int i=0;i<stack_wrong;i+=1)
for(int j=i+1;j<stack_wrong;j+=1)
if(wrong[i]==wrong[j])
wrong[j]='*';
for(int i=0;i<stack_wrong;i+=1)
if(wrong[i]!='*')
printf("%c",wrong[i]);
}
这到底是为什么呢?
-1031 查验身份证(15)
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{
int n;
int flag=1,inner_flag=1;
scanf("%d",&n);
char s[n][18];
int q[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int sum=0;
for(int i=0;i<n;i++)
{
sum=0;
inner_flag=1;
scanf("%s",s[i]);
for(int j=0;j<17;j++)
{
if(((int)s[i][j]-48>10)||((int)s[i][j]-48<0))
{
for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");
flag=0;
inner_flag=-1;
break;
}
sum+=q[j]*((int)s[i][j]-48);
}
// printf("%d\n",sum%11*inner_flag);
switch(sum%11*inner_flag)
{
case 0:
if(strcmp(&s[i][17],"1")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 1:
if(strcmp(&s[i][17],"0")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 2:
if(strcmp(&s[i][17],"X")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 3:
if(strcmp(&s[i][17],"9")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 4:
if(strcmp(&s[i][17],"8")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 5:
if(strcmp(&s[i][17],"7")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 6:
if(strcmp(&s[i][17],"6")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 7:
if(strcmp(&s[i][17],"5")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 8:
if(strcmp(&s[i][17],"4")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 9:
if(strcmp(&s[i][17],"3")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
case 10:
if(strcmp(&s[i][17],"2")!=0)
{for(int m=0;m<18;m++)
printf("%c",s[i][m]);
printf("\n");flag=0;}break;
}
}
if(flag==1)
printf("All passed");
}
-1032 挖掘机技术哪家强(20)
#include<stdio.h>
#include<stdlib.h>
int comp(const void *a,const void *b)
{
return ((int*)b)[1]-((int*)a)[1];
}
int main()
{
int n;
scanf("%d",&n);
int sum[n][2];
int school,score;
for(int i=0;i<n;i+=1)
{
sum[i][1]=0;
sum[i][0]=i;
}
for(int i=0;i<n;i++)
{
scanf("%d %d",&school,&score);
sum[school-1][1]+=score;
}
qsort(sum,n,sizeof(sum[0]),comp);
printf("%d %d",sum[0][0]+1,sum[0][1]);
}
//点0没有过,虽然很可惜很想调整,但是这道题我不能对,要保持21题的正确数,所以很抱歉啦~我会纠正你的
-1036 和奥观海一起编程(15)
#include<stdio.h>
int main()
{
int n,i,j;
char c;
scanf("%d %c",&n,&c);
if(3<=n&&n<=20)
{
for(i=0;i<n;i++)
printf("%c",c);
printf("\n");
for(i=0;i<(int)(1.0*n/2+0.5)-2;i++)
{
printf("%c",c);
for(j=0;j<n-2;j++)
printf(" ");
printf("%c\n",c);
}
for(i=0;i<n;i++)
printf("%c",c);
printf("\n");
}
}
n/2自带取整所以要先转化成double类型
-1037 在霍格沃兹找零钱(20)
#include<stdio.h>
int main()
{
int ing,ins,ink,outg,outs,outk;
long long sumi,sumo,result;
scanf("%d.%d.%d %d.%d.%d",&ing,&ins,&ink,&outg,&outs,&outk);
int flag=1;
sumi=17*29*ing+29*ins+ink;
sumo=17*29*outg+29*outs+outk;
if(sumi<sumo)
{
ing=ing+outg;
outg=ing-outg;
ing=ing-outg;
ins=ins+outs;
outs=ins-outs;
ins=ins-outs;
ink=ink+outk;
outk=ink-outk;
ink=ink-outk;
flag=-1;
sumi=17*29*ing+29*ins+ink;
sumo=17*29*outg+29*outs+outk;
}
result=sumi-sumo;
if(flag==1)
printf("-");
printf("%.0lld.",result/17/29);
result-=(int)(result/17/29)*17*29;
printf("%.0lld.",result/29);
result-=(int)(result/29)*29;
printf("%.0lld",result);
}
flag的正负还没有想明白,不过这次不能对这道题,稍后修改。
-1038 统计同成绩学生(20)
#include<stdio.h>
int main()
{
int N,K;
scanf("%d",&N);
int temp;
int score[100];
for(int i=0;i<100;i+=1)
score[i]=0;
for(int i=0;i<N;i+=1)
{
scanf("%d",&temp);
score[temp]+=1;
}
scanf("%d",&K);
for(int i=0;i<K-1;i+=1)
{
scanf("%d",&temp);
printf("%d ",score[temp]);
}
scanf("%d",&temp);
printf("%d\n",score[temp]);
}
-1039 到底买不买(20)
#include<stdio.h>
int main()
{
char std [1000];
char need[1000];
scanf("%s",std);
scanf("%s",need);
int temp_std=0,temp_need=0;
int std_remain=0,need_remain=0;
for(;need[temp_need]!='\0';temp_need+=1)
for(temp_std=0;std[temp_std]!='\0';temp_std+=1)
if(std[temp_std]==need[temp_need])
{
std[temp_std]='^';
need[temp_need]='^';
break;
}
temp_need=temp_std=0;
for(;std[temp_std]!='\0';temp_std+=1)
if(std[temp_std]!='^')
std_remain+=1;
for(;need[temp_need]!='\0';temp_need+=1)
if(need[temp_need]!='^')
need_remain+=1;
if(need_remain==0)
printf("Yes %d",std_remain);
else
printf("No %d",need_remain);
}
-1043 输出PATest(20)
#include<stdio.h>
#include<string.h>
int main()
{
int num[6]={0,0,0,0,0,0};
int sum=0,i=0;
char c[]={"PATest"};
char s[10000];
scanf("%s",s);
while(s[i]!=NULL)
{
switch(s[i])
{
case 'P':num[0]+=1;sum+=1;break;
case 'A':num[1]+=1;sum+=1;break;
case 'T':num[2]+=1;sum+=1;break;
case 'e':num[3]+=1;sum+=1;break;
case 's':num[4]+=1;sum+=1;break;
case 't':num[5]+=1;sum+=1;break;
}
i+=1;
}
while(sum>=1)
for(i=0;i<6;i++)
if(num[i]!=0)
{
printf("%c",c[i]);
num[i]-=1;
sum-=1;
}
}
-1046 划拳(15)
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i,j,k;
int suma=0,sumb=0;
int numa,numb,aca,acb,sum;
for(i=0;i<n;i++)
{
scanf("%d %d %d %d",&numa,&aca,&numb,&acb);
sum=numa+numb;
if(aca==sum&&acb!=sum)
sumb+=1;
else if(aca!=sum&&acb==sum)
suma+=1;
}
printf("%d %d",suma,sumb);
}
-1047 编程团体赛(20)
#include<stdio.h>
#include<stdlib.h>
int comp(const void *a,const void *b)
{
//printf("%d %d\n",*((int*)b+1), *((int*)a+1));
return *((int*)b+1)-*((int*)a+1);
}
int main()
{
int n;
scanf("%d",&n);
int sum[1001][2];
for(int i=0;i<1001;i++)
{
sum[i][1]=0;
sum[i][0]=i;
}
int score,team,people;
for(int i=0;i<n;i++)
{
scanf("%d-%d %d",&team,&people,&score);
sum[team][1]+=score;
}
qsort(&sum[0],1001,sizeof(sum[0]),comp);
printf("%d %d",sum[0][0],sum[0][1]);
}
-1053 住房空置率(20)
#include<stdio.h>
int main()
{
int N,D;
double e;
scanf("%d %lf %d",&N,&e,&D);
int num[2]={0,0};
int j,i,ob;
for(i=0;i<N;i++)
{
scanf("%d",&ob);
int day=0;
double observe = 0.0;
for(j=0;j<ob;j++)
{
scanf("%lf",&observe);
if(observe<e)
day+=1;
}
//printf("%d ",day);
if(1.0*day/ob>0.5&&ob>D)
num[1]+=1;
else if(1.0*day/ob>0.5)
num[0]+=1;
//printf("%d %d %.2f\n",num[0],num[1],1.0*day/ob);
}
printf("%.1f",100.0*num[0]/N);
printf("%s", "% ");
printf("%.1f",100.0*num[1]/N);
printf("%s","%\n");
}
-1056 组合数的和(15)
#include<stdio.h>
int main()
{
int n,i,j;
int sum=0;
scanf("%d",&n);
int number[n];
for(i=0;i<n;i++)
{
scanf("%d",&number[i]);
sum+=number[i];
}
printf("%d\n",11*sum*(n-1));
}
算是巧解,比较满意…
-1061 判断题(15)
#include<stdio.h>
int main()
{
int n,m;
int i,j,k,sum=0;
scanf("%d %d",&n,&m);
int score[m];
int key[m];
for(i=0;i<m;i++)
scanf("%d",&score[i]);
for(i=0;i<m;i++)
scanf("%d",&key[i]);
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
{
scanf("%d",&k);
if(k==key[j])
sum+=score[j];
}
printf("%d\n",sum);
}
}
-1062 最简分数(20)
#include<stdio.h>
#include<math.h>
int main()
{
int a1,b1,a2,b2,m,j=0,k=1;
int result[10];
int contain[10];
double d1,d2,i;
scanf("%d/%d %d/%d %d",&a1,&b1,&a2,&b2,&m);
for(i=1.0*a1/b1*m;i<=1.0*a2/b2*m;i+=1)
{
int a,b,c;
b=m<i?m:(int)i;
if(b==0)
continue;
a=m>(int)i?m:(int)i;
c=m%(int)i;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
if(b==1)
result[j++]=(int)i;
}
for(k=0;k<j;k+=1)
{
printf("%d/%d",result[k],m);
if(k<j-1)
printf(" ");
}
}
查了m和i的最大公因数,但是123三个点还是不对,4段错误,还要修改…
-1063 计算谱半径(20)
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
double max=0,sum;
scanf("%d",&n);
int a,b;
for(i=0;i<n;i++)
{
scanf("%d %d",&a,&b);
sum=pow(a,2)+pow(b,2);
if(max<sqrt(sum))
max=sqrt(sum);
}
printf("%.2f",max);
}
-1064 朋友数(20)
#include<stdio.h>
#include<stdlib.h>
int comp(int*a,int*b)
{
return *a-*b;
}
int main()
{
int n,j=0;
scanf("%d",&n);
int num[n];
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
int result[n];
for(int i=0;i<n;i++)
{
int sum=0;
while(num[i]>=1)
{
sum+=num[i]%10;
num[i]/=10;
}
j=0;
int flag=1;
while(result[j]!=NULL)
{
if(sum==result[j])
{
flag=0;
break;
}
j++;
}
if(flag==1)
result[j]=sum;
}
qsort(result,j+1,sizeof(result[0]),comp);
printf("%d\n",j+1);
for(int i=0;i<j+1;i++)
{
printf("%d",result[i]);
if(i<j)
printf(" ");
}
}
在自己电脑上可以通过样例,但不知道为啥就是一个点都过不了…
这道题目要标红
-1066 图像过滤(15)
#include<stdio.h>
int main()
{
int M,N,A,B,C;
scanf("%d %d %d %d %d",&M,&N,&A,&B,&C);
int map[M][N];
int i,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j]>=A&&map[i][j]<=B)
map[i][j]=C;
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%03d",map[i][j]);
if(j!=N-1)
printf(" ");
}
printf("\n");
}
}
-1069 微博转发抽奖(20)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int M,N,S;
scanf("%d %d %d",&M,&N,&S);
char name[M][20];
int flag=0,stack=0;
int duplicate=0;
char winner[M][20];
for(int i=0;i<M;i+=1)
scanf("%s",name[i]);
for(int i=S-1;i<M;i+=N)
{
do
{
duplicate=0;
for(int k=0;k<stack;k+=1)
{
if(strcmp(winner[k], name[i])==0)
{
duplicate=1;
break;
}
}
if(duplicate==1)
i+=1;
else
{
duplicate=0;
strcpy(winner[stack++], name[i]);
printf("%s\n",name[i]);
}
}while(duplicate==1);
flag=1;
}
if(flag==0)
printf("Keep going...\n");
}
点3没过
-1070 结绳(25)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int comp(const void *a,const void *b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int n;
scanf("%d",&n);
int l[n];
double sum=0;
for(int i=0;i<n;i++)
scanf("%d",&l[i]);
qsort(&l[0],n,sizeof(int),comp);
for(int i=0;i<n;i++)
{
sum=sum/2+l[i];
}
printf("%d",(int)sum/2);
}
点1过不了…ummmmm,见鬼了,今天都是差一个点…
-1072 开学寄语(20)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int N,M,people_num=0,good_num=0;
scanf("%d %d",&N,&M);
char name[N][6];
int good[N][11];
int trash[N][11];
int standard[M];
int num;
int flag=0;
int trash_num=0;
for(int i=0;i<M;i+=1)
scanf("%d",&standard[i]);
for(int i=0;i<N;i+=1)
{
scanf("%s %d",name[i],&num);
for(int j=0;j<num;j+=1)
{
scanf("%d",&good[i][j]);
for(int k=0;k<M;k+=1)
{
if(good[i][j]==standard[k])
{
if(flag==0)
{
printf("%s: ",name[i]);
flag=1;
people_num+=1;
}
trash[i][trash_num++]=good[i][j];
good_num+=1;
}
}
}
if(flag==1)
{
for(int m=0;m<trash_num-1;m+=1)
{ printf("%d ",trash[i][m]);}
printf("%d\n",trash[i][trash_num-1]);
}
trash_num=0;
flag=0;
}
printf("%d %d\n",people_num,good_num);
}
点2过不了