相关资料已有答案,看了一眼,做法有所不同,所以发出来供大家参考。不贴题了。
一、找3
直接输入字符串找。比正常做法粗暴一些,也好想一些。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char a[10];
scanf("%s",&a);
int ans=0;
if(a[0]=='3')
{
ans++;
}
if(a[1]=='3')
{
ans++;
}
if(a[2]=='3')
{
ans++;
}
printf("%d",ans);
return 0;
}
二、从数组中删除数据
并不需要删除。是有一些贪心思想的(
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n,x;
int a[25];
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
scanf("%d",&x);
for(int i=0;i<n;++i)
{
if(x!=a[i])
{
printf("%d ",a[i]);
}
}
return 0;
}
三、回文字符串判断
这题做着有一种KMP的幻视…
其实很简单_双指针就行。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
char a[107];
scanf("%s",&a);
int len=strlen(a);
int ans=1;
for(int j=0;j<len/2;++j)
{
if(a[j]!=a[len-1-j])
ans=0;
}
if(ans)
printf("TRUE\n");
else
printf("FALSE\n");
}
return 0;
}
四、读文件计算平均成绩
不擅长的题目,难在读文件那几个函数。
查漏补缺了…
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN=26;
typedef long long ll;
const int N = 2e5 + 7;
int a[80];
int main()
{
char buf[99999];
int i=0,minn=N;
FILE *fp = fopen("file3.txt","r");
fgets(buf,999999,fp);
int len=strlen(buf),temp;
int ansl=0,ansr=0;
double sum=0;
while(sscanf(buf+i,"%d",&temp))
{
if(i==len+1)
break;
sum+=temp;
if(temp>=90)
ansl++;
else if(temp<60)
ansr++;
while(temp/=10)
i++;
i+=2;
}
printf("%.2f %d %d",sum*1.00/30,ansl,ansr);
return 0;
}
五、指针做函数的参数
斐波那契。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN=26;
typedef long long ll;
const int N = 2e5 + 7;
void fib(int a[],int n,int *count,double *avg)
{
double sum=0;
for(int i=0;i<n;i++)
{
if(a[i]%2==0)
{
*count = *count +1;
sum+=a[i];
}
}
*avg = sum/(*count);
}
int main()
{
int n;
int a[48];
memset(a,0,sizeof(a));
scanf("%d",&n);
a[0]=1;a[1]=1;
for(int i=2;i<40;++i)
{
a[i]=a[i-1]+a[i-2];
}
int count=0;
double avg;
fib(a,n,&count,&avg);
printf("%d ",count);
printf("%.2f",avg);
return 0;
}
六、指针与二维数组边界问题
完全没必要用指针方法。。。。。。
这是没必要版:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN=26;
typedef long long ll;
const int N = 2e5 + 7;
int main()
{
int n;
scanf("%d",&n);
printf("%d",12*n+90);
return 0;
}
这是老师判题所以要用指针版:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN=26;
typedef long long ll;
const int N = 2e5 + 7;
int main()
{
int n;
int a[4][4];
int m=0;
scanf("%d",&n);
int (*p)[4];
p=a;
for(int i=0;i<4;++i)
{
for(int j=0;j<4;j++)
{
*(*(p+i)+j)=4*i+j+n;
}
}
for(int i=0;i<4;++i)
{
for(int j=0;j<4;j++)
{
if(i==0||i==3||j==0||j==3)
m=*(*(p+i)+j)+m;
}
}
printf("%d",m);
return 0;
}
七、结构体问题
严重怀疑答案没过编译。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int MAXN=26;
typedef long long ll;
const int N = 2e5 + 7;
struct student
{
int num;
char name[25];
char sex;
int age;
};
struct student stu[55];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&stu[i].num);
scanf("%s",&stu[i].name);
getchar();//答案没有,但必须加!!!
scanf("%c",&stu[i].sex);
scanf("%d",&stu[i].age);
}
for(int i=0;i<n;++i)
{
if(stu[i].age>=20)
{
printf("%d %s\n",stu[i].num,stu[i].name);
}
}
}
老师答应不考链表我就不写最后一道题了。