2022.11.26周结 1.贪吃蛇排行榜代码2.python与c语言区别3.奥赛一本通1060 1061 1062 1063 1064 1065 1066 2021 2022 C语言版
一.贪吃蛇排行榜代码(有bug仅供参考)
因作者水平有限,打算后面再回来写,c语言写感觉好复杂,看不懂可以去网上搜搜其他的,当然也欢迎大佬来指点迷津
void ReadGrade()
{
char fr[10];
int index;
int i=0;
FILE*fp=fopen("排行榜测试版.txt","r");
if(fp==NULL)
{
fp=fopen("排行榜测试版.txt","w");
fwrite(&max,sizeof(int),1,fp);
}
fseek(fp,0,SEEK_SET);
fread(fr,1,9,fp);
while(fr[i]!=' '){
index*=10;
index+=fr[i]-'0';
i++;
}
max=index;
fp=NULL;
fclose(fp);
}
// fprintf(fpo,"%d\n", ar[i])
void WriteGrade()
{
/* FILE*pf=fopen("贪吃蛇最高得分记录.txt","a");
if(pf==NULL)
{
printf("保存最高得分记录失败\n");
exit(0);
}
fwrite(&grade,sizeof(int),1,pf);
fclose(pf);
pf==NULL;
*/
int o=3;
char fy[3]={0};
char fu[3];
//int l=0;
FILE*fp=fopen("排行榜测试版.text","a");
do{
for(int p=0;p<3;p++){
fy[p]=grade%10+'0';
}
}while(grade/=10!=0);//将这次的数据一个个转换为字符
for(int o=0;o<=2;o++)
{
fu[o]=fy[2-o];
}//逆置
fwrite(fu,1,3,fp);//输入到文件里
fclose(fp);
char fr[9];
int res[3]={0,0,0};
int sum=0;
int index=0;
char ft[6];
int l;
char fi[6];
int h=0;
char fo[9];
int g=0;
int f=0;
fopen("排行榜测试版.txt","r");
if (fp==NULL){
fopen("排行榜测试版.txt","w");
}
int result=fread(fr,1,9,fp);//取出三个未排序成绩
if(result==EOF)
{
printf("读取失败");
}
for(int i=0;i<9;i++){
if(fr[i]!=' '){
res[index]*=10;
res[index]+=fr[i]-'0';
}else{
index++;//和转换为int型
}
}
for(int j=0;j<3;j++){//三个数据 排序
for(int k=0;k<3-j;k++){
if(res[k]<res[k+1]){
int temp=res[k];
res[k]=res[k+1];
res[k+1]=temp;
}
}
}
for(int u=0;u<6;u++){
fi[u]=res[h];
u+=1;
fi[u]=' ';
h++;
}//三个数据每相邻一个添加空格
for(int r=0;r<2;r++){
if(fi[g]!=' '){
do{
fo[f]=(fi[g]%=10);
f++;
}while(fi[g]/=10!=0);
g++;}
else {
f++;
fo[f]=' ';
}
}
fwrite(fo,1,sizeof(fo),fp);
}
二.python与c语言区别
1.python变量
变量主要和c语言没有多大区别,就是 整数型 浮点数 布尔型 字符串
money=50#不用定义直接起来用,也不用每句后面加引号,'printf'变成‘print’
money=money-10
print("买了冰淇淋花费十元,还剩余",money,"元")
2.python数据类型
name="黑马程序员"
string_a=type(name)#type可以得出括号里的变量是什么类型
print(string_a)
3.python数据类型转换
num_str=str(11)#‘11’本来是整数型,现在把括起来再加个‘str’就会变成字符串型
print(type(num_str),num_str)
4.标识符
标识符与c语言一样在Python里,由字母、数字、下划线组成,但不能以数字开头,不能用关键字
5.运算符
| + | 加法,列表、元组、字符串合并与连接,正号 |
| - | 减发,集合差集,相反数 |
| * | 乘法,序列重复 |
| / | 除 |
| // | 求整商,若操作数中有实数,其结果为实数形式的整数 |
| % | 求余数,字符串格式化 |
| ** | 幂运算 |
6.字符串的格式化
name="牛马程序员"
salary="1w+"
month=12
message="我是%s我每月工资是%s但我每天要工作%d小时"%(name,salary,month)#‘%’表示占一个位置后面要插入一个变量进去‘%s’表示插入的是一个字符串型
print(message)
这个快速很多
name="传智播客"
year=2006
price=19.99
print(f"我是{name},我成立于:{year},我今天的股票价格是{price}")#print(f"")
7.字符串的拼接
name='今晚风很大'
print("今天天气是"+name)#print(""+变量)
8.input语句
name_1=input("请出示你的身份证明")#input相当于scanf
user=input("请告示你的vip等级")
print(f"您好:{name_1},您是尊贵的{user}用户,欢迎您的光临"
)
三.奥赛一本通1060 1061 1062 1063 1064 1065 1066 2021 2022 C语言版
1060
【题目描述】
给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。
【输入】
输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的浮点数,代表各个样本数据。
【输出】
输出一行,包含一个浮点数,表示均值,精确到小数点后4位。
【输入样例】
2 1.0 3.0【输出样例】
2.0000
#include <stdio.h>
int main()
{
float sum=0;
int n;
float a[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%f",&a[i]);
sum+=a[i];
}
printf("%.4f",sum/n);
}
1061
【题目描述】
读入n(1≤n≤10000)个整数,求它们的和与均值。
【输入】
输入第一行是一个整数n,表示有n个整数。
第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。
【输出】
输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。
【输入样例】
4 344 222 343 222【输出样例】
1131 282.75000
#include <stdio.h>
int main(void)
{
int n,ar[10001];
double average;
int i;
scanf("%d",&n);
ar[0]=0;//利用数组可以少定义一个sum变量
for(i=1;i<=n;i++)
{
scanf("%d",&ar[i]);
ar[0]+=ar[i];
}
average=1.0*ar[0]/n;
printf("%d %.5lf",ar[0],average);
return 0;
}
1062
【题目描述】
孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?
【输入】
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。
【输出】
输出一个整数,即最高的成绩。
【输入样例】
5 85 78 90 99 60【输出样例】
99
#include <stdio.h>
int main(void)
{
int n,a[101];
int i;
scanf("%d",&n);
a[0]=0;//存最大值
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]>a[0]){
a[0]=a[i];
}
}
printf("%d",a[0]);
}
1063
【题目描述】
给定一个长度为n的非负整数序列,请计算序列的最大跨度值(最大跨度值 = 最大值减去最小值)。
【输入】
一共2行,第一行为序列的个数n(1 <= n <= 1000),第二行为序列的n个不超过1000的非负整数,整数之间以一个空格分隔。
【输出】
输出一行,表示序列的最大跨度值。
【输入样例】
6 3 0 8 7 5 9【输出样例】
9
#include <stdio.h>
int main()
{
int n,a[1000];
int min=9999,max=0;//初始最大值和最小值
int i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>max){
max=a[i];
}
if(a[i]<min){
min=a[i];
}
}
printf("%d",max-min);
}
1064
【题目描述】
2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。输入第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目。输出4个整数,为A国所获得的金、银、铜牌总数及总奖牌数。
【输入】
输入n+1行,第1行是A国参与决赛项目的天数n,其后n行,每一行是该国某一天获得的金、银、铜牌数目,以一个空格分开。
【输出】
输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,以一个空格分开。
【输入样例】
3 1 0 3 3 1 0 0 3 0【输出样例】
4 4 3 11
第一个是我尝试用结构体数组写的比较复杂,第二个是用到二维数组
/*#include01<stdio.h>
struct Grade
{
int glode;
int ying;
int tone;
}grade[3];
int main()
{
int sum=0;
grade[0].glode=0;
grade[0].ying=0;
grade[0].tone=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&grade[i].glode);
scanf("%d",&grade[i].ying);
scanf("%d",&grade[i].tone);
grade[0].glode+=grade[i].glode;
grade[0].ying+= grade[i].ying;
grade[0].tone+= grade[i].tone;
}
sum=grade[0].glode+grade[0].ying+grade[0].tone;
printf("%d %d %d %d",grade[0].glode,grade[0].ying,grade[0].tone,sum);
}*/
#include <stdio.h>
int main()
{
int n;
int sum=0;
int a[17][3]={0};
scanf("%d",&n);
for(int i=1;i<n;i++){
scanf("%d",a[i][0]);
scanf("%d",a[i][1]);
scanf("%d",a[i][2]);
a[0][0]+=a[i][0];
a[0][1]+=a[i][1];
a[0][2]+=a[i][2];
}
sum=a[0][0]+a[0][1]+a[0][2];
printf("%d %d %d %d",a[0][0],a[0][1],a[0][2],sum);
}
1065
【题目描述】
到 n(包括 m和 n)之间的所有奇数的和,其中, m 不大于 n,且 n 不大于300。例如 m=3, n=12, 其和则为:3+5+7+9+11=35计算非负整数m
。
【输入】
和 n,两个数以一个空格分开,其中 0≤ m≤ n≤300两个数 m
。
【输出】
到 n(包括 m 和 n输出一行,包含一个整数,表示m
)之间的所有奇数的和
【输入样例】
7 15【输出样例】
55
#include <stdio.h>
int main(void)
{
int sum=0;
int n,m;
scanf("%d %d",&n,&m);
for(;n<=m;n++)
{
if(n%2!=0){
sum+=n;
}
}
printf("%d",sum);
}
1066
【题目描述】
和 n之间(包括 m和 n)能被17整除的数累加,其中,0< m< n<1000将正整数m
。
【输入】
和 n一行,包含两个整数m
,其间,以一个空格间隔。
【输出】
输出一行,包行一个整数,表示累加的结果。
【输入样例】
50 85【输出样例】
204
#include<stdio.h>
int main(void)
{
int n,m;
int sum=0;
scanf("%d %d",&n,&m);
for(;n<=m;n++){
if(n%17==0){
sum+=n;
}
}
printf("%d",sum);
}
2021
【题目描述】
, n求两个正整数m
的最大公约数。
【输入】
, n输入m
。
【输出】
, nm
的最大公约数。
【输入样例】
4 6【输出样例】
2【提示】
【数据范围】
对于全部数据:m,n<4000000
。
辗转相除法
#include <stdio.h>
int main(void)
{
int n,m,c;
scanf("%d %d",&n,&m);
if(n<m)
{
c=m;
m=n;
n=c;
}
while(m!=0)
{
c=m;
m=n%m;
n=c;
}
printf("%d",n);
return 0;
}
2022
【题目描述】
的最小 n编一程序求满足不等式1+12+13…+1n>=m
值。
其中,n,m
为正整数。
【输入】
输入m
。
【输出】
输出n
。
【输入样例】
3【输出样例】
11【提示】
【数据范围】
对于所有数据:m<=11
。
#include<stdio.h>
int main(void)
{
int m,n=0;
float sum=0;
scanf("%d",&m);
while(m>sum){
n++;
sum+=1.0/n;
}
printf("%d",n);
}
总结
太简单了没啥好总结的,刷了这么几道就巩固了一下基础,主要多深入了一下二维数组,辗转相除法,可以用a[0]代替sum,有一说一python真的比c简单干净很多。
下一周打算去研究一下数组和数据结构和算法
更多推荐


所有评论(0)