如果对哪段代码有疑问或什么不懂可以的加QQ3418208634( 欢迎交流~)
如果觉得杂鱼灰太狼哪题讲的不好的欢迎指出,我去修改捏~
[之前134出现不可控bug,现已修复,并由godyu进行补全134-150]
域为三个月前不可控BUG的存在未成功修复抱歉,现在已经全部提交完毕.
1101: 逆序数字(函数专题)
//注意:题目要求只需提交inverse函数部分即可
int inverse(int n)
int m=0; //定义最终需要返回的结果,注意应赋值为0,不然m的值会随机生成
do{
int x=n%10; //把最低位提取出来
m=m*10+x; //逆序相加
n/=10; //舍弃最低位
}while(n>0); //判断是否需要继续逆序
return m; //把结果传回main函数,注意题目只需传回逆序数值,而不是相加值
}
1102: 火车票退票费计算(函数专题)
double CancelFee(double price)
{
double change=0; //定义并把退票费初始化
double x=price*0.05; //先计算退票费用
double y=(int)(price*0.05); //保留整数部分
while(x>=1) //先把整数部分去掉看小数部分
{
x--;
}
if(x<0.25) //尾数小于0.25元的舍去
{
x=0;
}
else if(x>=0.25&&x<0.75) //不小于0.25元且小于0.75元的计为0.5元
{
x=0.5;
}
else if(x>=0.75) //不小于0.75元的进为1元
{
x=1;
}
change=x+y; //总退票费
return change;
}
1103: 平均学分绩点(函数专题)
#include<stdio.h>
int GP(int n)
{
if(n<60) //低于六十分没有G点
{
return 0;
}
else
return (n-50)/10; //六十分以上算出G点并返回值
}
int main()
{
int n,m,ncase;
scanf("%d",&ncase); //输入n门课程
double sum1=0,sum2=0;
while(ncase--)
{
scanf("%d %d",&m,&n); //输入学分和成绩
sum1+=GP(n)*m; //算出并累加每门课的绩点乘以该门课的学分
sum2+=m; //算出总学分
}
printf("%.1f",sum1/sum2); //输出平均学分绩点,保留一位小数
return 0;
}
1104: 求因子和(函数专题)
#include<stdio.h>
int FacSum(int n)
{
int sum=1; //因为1是肯定有的,直接赋值1减少一次循环,优化算法
for(int i=2;i<=n/2;i++) //这里涉及到一个小技巧,因子不可能比的这个数的一半大,所以直接n/2,优化算法提高效率
{
if(n%i==0) //这里遍历一下查找因子
{
sum+=i; //找到直接相加
}
}
return sum; //把和返回
}
int main()
{
int n;
scanf("%d",&n);
int result=FacSum(n); //调用并接收函数
printf("%d",result);
}
1105: 判断友好数对(函数专题)
#include<stdio.h>
int facsum(int n)
{
int sum=0;
if(n==2)
return 1; //2只有一个正因子1(除本身)
if(n>2)
{
for(int i=1;i<n;i++) //遍历寻找因子
{
if(n%i==0)
{
sum+=i; //找到则相加
}
}
}
return sum;
}
int main()
{
int m,n,an=0; //an为标识,用于判断输出
scanf("%d %d",&m,&n);
for(int j=m;j<=n;j++) //遍历m到n之间的数
{
int num;
num=facsum(j); //调用函数接收正因子之和
if(j==facsum(num)&&j<num) //如果俩个数正因子之和相等,且比这个数小,则为友好数对,不加后面那个判断则会输出俩次
{
printf("%d %d\n",j,num);
an=1; //标识更改
}
}
if(an==0) //找不到则输出没有答案
printf("No answer");
return 0;
}
1106: 回文数(函数专题)
//只需要求出这个数的逆序并判断俩数是否相等即可
#include<stdio.h>
int hws(int i)
{
int sum=0;
while(i>9)
{
sum+=i%10;
i/=10;
sum=sum*10;
}
return sum+i; //返回逆序结果
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i=m;i<=n;i++)
{
int num=hws(i);
if(i==num) //若俩数相等则为回文数
{
printf("%d ",i);
}
}
return 0;
}
1107: 回文数猜想(函数专题)
//这题比上一题多加了一个循环判断
#include<stdio.h>
int inverse(int n)
{
int sum=0;
while(n>=10) //求出逆序数
{
sum+=n%10;
n/=10;
sum*=10;
}
return sum+n;
}
int main()
{
int n,m;
scanf("%d",&n);
while(m=inverse(n),m!=n) //m接收n的倒序数,若不相等则开始循环
{
printf("%d ",n); //输出过程值,注意有空格
n=m+n; //正序和倒序相加,开始第二轮循环
}
printf("%d",m); //输出最后的回文数
return 0;
}
1108: 打印数字图形(函数专题)
//本题应找出每行空格与数字的规律
#include<stdio.h>
void PrintDigit(int m)
{
for(int i=1;i<=m;i++) //左边逐递增
{
printf("%d",i);
}
m--; //使m-1,不输出最高位
while(m>=1) //右边逐渐递减
{
printf("%d",m--);
}
}
void PrintSpace(int m) //打印空格
{
for(int i=0;i<m;i++)
{
printf(" ");
}
}
int main()
{
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++) //打印上半部分
{
PrintSpace(m-i); //上半部分空格逐渐递减
PrintDigit(i); //数字逐渐增加
printf("\n"); //换行
}
for(int j=1;j<m;j++) //打印下半部分
{
PrintSpace(j); //空格逐渐递增
PrintDigit(m-j); //数字逐渐减少
if(j!=m-1) //该判断可以使最后一行不用换行
printf("\n");
}
return 0;
}
1109: 数根(函数专题)
#include<stdio.h>
int digitSum(int n)
{
int sum=0;
while(n>9) //只要是大于或等于俩位数就分离
{
sum+=n%10; //提取最低位并相加
n/=10; //除去最低位
}
return sum+n; //返回各个位上数字的和
}
int main()
{
int n,x;
scanf("%d",&n);
if(n>9)
{
x=digitSum(n); //调用函数并接收函数返回的值
while(x>9) //如果返回的值还是俩位数或以上则继续相加
{
int t=n;
n=x;
x=t;
x=digitSum(n);
}
printf("%d",x);
}
else
printf("%d",n);
return 0;
}
1110: 最近共同祖先(函数专题)
/*观察图中孩子与双亲的关系,如果双亲编号为i,左孩子为2*i,右孩子为2*i+1。反之,对于一个编号为i的结点,不论奇数偶数,除以2取整就是i。所以我们可以用递归让较大的数(也就是辈分低的数)向上找双亲,直到他们相遇*/
#include<stdio.h>
int common(int x,int y)
{
if(x==y) //如果相等,x的值则为共同祖先
return x;
else if(x>y)
{
return common(x / 2, y); //若x较大则让x向上走
}
else
return common(x, y / 2); //若y较大则让y向上走
}
int main()
{
int x, y,j;
scanf("%d %d", &x, &y);
j = common(x, y); //调用并接收函数传递回来的值
printf("%d", j);
}
1111: 多个整数的逆序输出(函数专题)
//好好理解一下递归捏
#include<stdio.h>
void inverse(int n)
{
int num;
scanf("%d", &num); //读一个整数存入num
if(n>1) //如果n有多个数则开始递归逆序输出
{
inverse(n - 1);
printf("%d ", num);
}
if(n==1) //若只有一行则直接输出
printf("%d ", num);
}
int main()
{
int n;
scanf("%d", &n);
inverse(n); //调用函数
return 0;
}
1112: 进制转换(函数专题)
//特别简单,明白递归的原理,直接倒序输出就好了
#include<stdio.h>
void convert(int n)
{
if(n>0) //使用递归倒序输出余数
{
convert(n / 2);
printf("%d", n % 2);
}
}
int main()
{
int n;
scanf("%d", &n);
convert(n);
}
1113: 递归调用的次数统计(函数专题)
//题目给了斐波那契数列的求法,我们只需填充枝叶即可
#include<stdio.h>
int fib(int k)
{
if(k==1||k==2)
return 1;
else //
return fib(k - 1) + fib(k - 2);
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", fib(n));
printf("递归调用了%d次", 2*fib(n)-1); //我们仔细观察函数,发现else的return有俩个递归,所以次数为2*fib(n)-1次
return 0;
}
1114: 逆序
//本题考察的是对数组下标的理解
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int arr[n]; //定义一个长度为n的数组
for(int i=0;i<n;i++) //数组下标从0开始数
{
scanf("%d",&arr[i]); //依次把值存进数组
}
for(int i=n-1;i>=0;i--) //数组最大下标为长度-1,然后倒序输出
{
printf("%4d",arr[i]); //占四列,右对齐
}
return 0;
}
1115: 数组最小值
#include <stdio.h>
int main () {
int n, a = 0;
scanf("%d", &n);
int room[1000]; //n不大于1000,即数组的长度不大于1000
for (int i = 0; i < n; i++) //读入数组
{
scanf("%d", &room[i]);
}
int min = room[0];
for (int j = 0; j < n; j++)
{
if (min > room[j]) //一个简单的排序找出最小值
{
min = room[j];
a = j;
}
}
printf("%d %d", min, a); //输出最小值及其下标
return 0;
}
1116: 删除元素
#include <stdio.h>
// 删除数组A中下标为i的元素
void del(int a[], int n, int i)
{
// 判断i是否超出数组范围
if (i < 0 || i >= n)
{
printf("Invalid index\n");
return;
}
// 将数组A中下标为i的元素之后的元素向前移动一位
for (int j = i; j < n - 1; j++)
{
a[j] = a[j + 1];
}
// 数组长度减1
n--;
}
// 打印数组A
void PrintArr(int a[], int n)
{
// 遍历数组A
for (int i = 0; i < n; i++)
{
printf("%d", a[i]);
if (i < n - 1)
{
printf(" ");
}
}
printf("\n");
}
int main()
{
// 输入数组长度和要删除的元素下标
int n, i;
scanf("%d", &n);
int A[n];
// 输入数组A的元素
for (int i = 0; i < n; i++)
{
scanf("%d", &A[i]);
}
scanf("%d", &i);
// 调用del函数删除数组A中下标为i的元素
del(A, n, i);
// 打印删除元素后的数组
PrintArr(A, n - 1); // 输出删除元素后的数组,跳过最后一个元素
return 0;
}
1117: 查找数组元素
#include<stdio.h>
//函数find用于查找数组a中元素x的位置
int find(int a[],int *n,int x)
{
int t=-1;
//遍历数组a,查找元素x的位置
for(int i=0;i<*n;i++)
{
if(x==a[i])
{
t=i;
return t;
break;
}
}
return t;
}
//函数del用于删除数组a中元素x的位置
void del(int a[],int *n,int x)
{
//从x位置开始,将数组a中后面的元素向前移动一位
for(int j=x-1;j<*n-1;j++)
{
a[j]=a[j+1];
}
(*n)--;
}
//函数PrintArr用于打印数组a
void PrintArr(int a[],int n)
{
//遍历数组a,打印每一个元素
for(int i=0;i<n;i++)
{
printf("%4d",a[i]);
}
printf("\n");
}
int main()
{
int t;
int n,x;
//输入数组a的长度
scanf("%d",&n);
//定义一个长度为n的数组a
int a[n];
//输入数组a的每一个元素
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//输入要查找的元素x
scanf("%d",&x);
//调用函数find,查找元素x的位置
t=find(a,&n,x);
//如果元素x不存在,则输出Not Found
if(t==-1)
{
printf("Not Found");
}
//如果元素x存在,则调用函数del,删除元素x的位置,并打印新的数组a
else
{
del(a,&n,x);
PrintArr(a,n);
}
return 0;
}
1118: 数列有序
#include<stdio.h>
void insert(int a[],int n,int num)
{
//将num插入到a数组中
a[n]=num;
n++;
//冒泡排序
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void PrintArr(int a[],int n)
{
//打印数组
for(int i=0;i<n+1;i++)
{
printf("%d",a[i]);
if(i<n)
{
printf(" ");
}
}
}
int main()
{
//输入数组大小
int n;
scanf("%d",&n);
//初始化数组
int a[n];
//输入数组元素
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//输入插入的元素
int num;
scanf("%d",&num);
//插入元素
insert(a,n,num);
//打印数组
PrintArr(a,n);
return 0;
}
1119: 一维数组排序
#include<stdio.h>
void sort(int a[],int n)
{
//冒泡排序
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
void PrintArr(int a[],int n)
{
//输出数组
for(int i=0;i<n;i++)
{
printf("%d",a[i]);
if(i<n-1)
{
printf(" ");
}
}
}
int main()
{
//输入数组长度
int n;
scanf("%d",&n);
int a[n];
//输入数组元素
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//调用冒泡排序函数
sort(a,n);
//输出排序后的数组
PrintArr(a,n);
return 0;
}
1120: 最值交换
#include<stdio.h>
int MinIndex(int a[],int n)
{
int min = a[0],down=0; //最小值和下标初始为第一个
for (int i = 0; i < n;i++)
{
if(a[i]<min) //如果遍历出来的数比最小值小
{
min = a[i]; //替换最小值
down = i; //记录下标
}
}
return down;
}
int MaxIndex(int a[],int n)
{
int max = a[0], down = n - 1; //最大值和下标初始为最后一个
for (int i = 0; i < n; i++)
{
if (a[i] > max) // 如果遍历出来的数比最大值大
{
max = a[i]; //替换最大值
down = i; //记录下标
}
}
return down;
}
void PrintArr(int a[],int n) //打印函数
{
for (int i = 0; i < n ;i++)
{
printf("%d", a[i]);
if(i<n-1)
{
printf(" ");
}
}
}
int main()
{
int n,x,y,t;
int a[15];
scanf("%d", &n);
for (int i = 0; i < n;i++)
{
scanf("%d", &a[i]);
}
x=MinIndex(a, n); //最小值和第一个交换
t = a[0];
a[0] = a[x];
a[x] = t;
y=MaxIndex(a, n); //最大值与最后一个交换
t = a[n - 1];
a[n - 1] = a[y];
a[y] = t;
PrintArr(a, n);
return 0;
}
1125: 上三角矩阵的判断
#include <stdio.h>
// 检查矩阵是否为上三角矩阵
int IsUpperTriMatrix(int a[][10], int n)
{
// 遍历矩阵的每一行
for (int i = 1; i < n; i++)
{
// 遍历当前行的每一列
for (int j = 0; j < i; j++)
{
// 如果当前列的元素不为0,则说明矩阵不是上三角矩阵
if (a[i][j] != 0)
{
return 0;
}
}
}
// 如果遍历完矩阵的每一行,说明矩阵是上三角矩阵
return 1;
}
int main()
{
// 读取矩阵的行数
int n, i, j;
scanf("%d", &n);
// 初始化一个n*n的矩阵
int a[10][10];
// 读取矩阵的每一个元素
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
// 调用函数检查矩阵是否为上三角矩阵
if (IsUpperTriMatrix(a, n))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
1126: 布尔矩阵的奇偶性
#include <stdio.h>
int boolf(int a[][100], int n)
{
// 定义两个标志变量,用于记录异常的行和列
int flag1 = 0, flag2 = 0, x, y;
// 遍历每一行,检查每一行的和是否为奇数
for (int i = 0; i < n ; i++)
{
int sum = 0;
// 计算每一行的和
for (int j = 0; j < n ; j++)
{
sum += a[i][j];
}
// 如果和为奇数,则记录异常的行
if (sum % 2 != 0)
{
flag1++;
x = i;
}
}
// 遍历每一列,检查每一列的和是否为奇数
for (int i = 0; i < n ; i++)
{
int sum = 0;
// 计算每一列的和
for (int j = 0; j < n ; j++)
{
sum += a[j][i];
}
// 如果和为奇数,则记录异常的列
if (sum % 2 != 0)
{
flag2++;
y = i;
}
}
// 如果异常的行和列都为0,则说明没有异常,输出OK
if (flag1 == 0 && flag2 == 0)
{
printf("OK");
}
// 如果异常的行和列只有一个,则说明只修改一个位置,输出修改位置的行列坐标
else if (flag1 == 1 && flag2 == 1)
{
printf("Change bit(%d,%d)", x, y);
}
// 如果异常的行和列有两个,则说明整张图片异常,输出corrupt
else
printf("Corrupt");
}
int main()
{
// 定义一个变量,用于存储图片的行数
int n;
// 定义一个二维数组,用于存储图片的像素值
int a[100][100];
// 读取图片的行数
scanf("%d", &n);
// 读取图片的像素值
for (int i = 0; i < n ; i++)
{
for (int j = 0; j < n ; j++)
{
scanf("%d", &a[i][j]);
}
}
// 调用boolf函数,检查图片是否异常
boolf(a, n);
return 0;
}
1127: 矩阵乘积
#include<stdio.h>
int main()
{
//定义变量
int m, p, n;
int arr[15][15];
int brr[15][15];
int crr[15][15];
//输入变量
scanf("%d %d %d", &m, &p, &n);
//输入arr
for (int i = 0; i < m;i++)
{
for (int j = 0; j < p;j++)
{
scanf("%d", &arr[i][j]);
}
}
//输入brr
for (int i = 0; i < p;i++)
{
for (int j = 0; j < n;j++)
{
scanf("%d", &brr[i][j]);
}
}
//计算crr
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
crr[i][j] = 0;
for (int k = 0; k < p; k++)
{
crr[i][j] += arr[i][k] * brr[k][j];
}
}
}
//输出crr
for (int i = 0; i < m; i++)
{
printf("%d", crr[i][0]);
for (int j = 1; j < n; j++)
{
printf(" %d", crr[i][j]);
}
printf("\n");
}
return 0;
}
1128: 课程平均分
#include<stdio.h>
int main()
{
//定义两个整型变量m和n
int m, n;
//定义一个二维数组a,大小为m*n
double a[1005][15];
//输入m和n
scanf("%d %d", &m, &n);
//循环m次,每次循环输入a[i][j]
for (int i = 0; i < m;i++)
{
for (int j = 0; j < n;j++)
{
scanf("%lf", &a[i][j]);
}
}
//循环n次,每次循环计算每一列的平均值
for (int i = 0; i < n;i++)
{
double sum = 0;
//循环m次,每次循环累加a[j][i]
for (int j = 0; j < m;j++)
{
sum += a[j][i];
}
//计算每一列的平均值
double avg = sum / m;
//输出平均值,保留两位小数
printf("%.2lf", avg);
//如果不是最后一行,输出空格
if(i!=n-1)
{
printf(" ");
}
}
return 0;
}
1129: 第几天
//纯暴力手法
#include <stdio.h>
int main()
{
// 定义变量
int year, month, day, num = 0;
// 输入
scanf("%d-%d-%d", &year, &month, &day);
// 判断是否为闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
// 根据月份判断
switch (month)
{
case 1:
printf("%d", day);
break;
case 2:
printf("%d", 31 + day);
break;
case 3:
printf("%d", 31 + 29 + day);
break;
case 4:
printf("%d", 31 * 2 + 29 + day);
break;
case 5:
printf("%d", 31 * 2 + 29 + 30 + day);
break;
case 6:
printf("%d", 31 * 3 + 29 + 30 + day);
break;
case 7:
printf("%d", 31 * 3 + 29 + 30 * 2 + day);
break;
case 8:
printf("%d", 31 * 4 + 29 + 30 * 2 + day);
break;
case 9:
printf("%d", 31 * 5 + 29 + 30 * 2 + day);
break;
case 10:
printf("%d", 31 * 5 + 29 + 30 * 3 + day);
break;
case 11:
printf("%d", 31 * 6 + 29 + 30 * 3 + day);
break;
case 12:
printf("%d", 31 * 6 + 29 + 30 * 4 + day);
break;
}
}
// 不是闰年
else
{
// 根据月份判断
switch (month)
{
case 1:
printf("%d", day);
break;
case 2:
printf("%d", 31 + day);
break;
case 3:
printf("%d", 31 + 28 + day);
break;
case 4:
printf("%d", 31 * 2 + 28 + day);
break;
case 5:
printf("%d", 31 * 2 + 28 + 30 + day);
break;
case 6:
printf("%d", 31 * 3 + 28 + 30 + day);
break;
case 7:
printf("%d", 31 * 3 + 28 + 30 * 2 + day);
break;
case 8:
printf("%d", 31 * 4 + 28 + 30 * 2 + day);
break;
case 9:
printf("%d", 31 * 5 + 28 + 30 * 2 + day);
break;
case 10:
printf("%d", 31 * 5 + 28 + 30 * 3 + day);
break;
case 11:
printf("%d", 31 * 6 + 28 + 30 * 3 + day);
break;
case 12:
printf("%d", 31 * 6 + 28 + 30 * 4 + day);
break;
}
}
return 0;
}
1130: 杨辉三角
#include<stdio.h>
int main()
{
//定义一个变量n
int n;
//定义一个二维数组a,初始值为1
int a[35][35]={1};
//输入n
scanf("%d",&n);
//循环n次
for (int i = 0; i < n;i++)
{
//循环i次
for (int j = 0; j < i + 1;j++)
{
//如果i等于0或者j等于0,则a[i][0]等于1
if(i==0||j==0)
{
a[i][0] = 1;
}
//如果i大于0且j不等于0,则a[i][j]等于a[i - 1][j - 1] + a[i - 1][j]
if(i>0&&j!=0)
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
//输出a[i][j]
printf("%d", a[i][j]);
//如果j小于n-1,则输出空格
if(j<n-1)
printf(" ");
//如果j等于i,则换行
if(j==i)
{
printf("\n");
}
}
}
return 0;
}
1131: 最常用字符
#include <stdio.h>
int main()
{
// 定义一个字符数组
char a[105];
// 定义一个整型数组,用于存储每个字母出现的次数
int s[27] = {0}, i = 0, m = 0, j;
// 读取字符串,并将其中的大写字母转换为小写字母
while ((a[i] = getchar()) != '\n')
{
if (a[i] >= 'A' && a[i] <= 'Z')
a[i] = a[i] + 32;
// 计算每个字母出现的次数
j = a[i] - 'a';
s[j] += 1;
i++;
}
// 遍历数组,找到出现次数最多的字母
for (i = 0; i < 26; i++)
{
if (s[m] < s[i])
{
m = i;
}
}
// 输出出现次数最多的字母
printf("%c", m + 'a');
return 0;
}
1132: 数字字符统计
#include <stdio.h>
int main()
{
// 定义变量n和t
int n, t;
// 定义变量ch
char ch;
// 输入变量n
scanf("%d", &n);
// 跳过换行符
getchar();
// 循环n次
for (int i = 0; i < n; i++)
{
// 初始化t为0
t = 0;
// 循环读取字符,直到遇到换行符
while ((ch= getchar()) != '\n')
{
// 如果字符大于等于0且小于等于9,t加1
if (ch>= '0' && ch <= '9')
{
t++;
}
}
// 输出t
printf("%d\n", t);
}
return 0;
}
1133: 单词个数统计
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main () {
// 定义变量
int count = 0, len;
char ch[1001];
// 读取一行字符串
fgets(ch, sizeof(ch), stdin);
// 计算字符串长度
len = strlen(ch);
// 如果字符串最后是换行符,则去掉换行符
if (ch[len-1] == '\n') {
ch[len-1] = '\0'; // 移除末尾的换行符
len--;
}
// 计算空格数量
for (int i = 0; i < len; i++) {
// 判断字符串中每个字符的前一个字符是否是字母或数字,且当前字符是否是空格
if (isalnum(ch[i-1]) && ch[i] == ' '){
count++;
}
}
// 判断字符串最后一个字符是否是字母或数字
if (isalnum(ch[len-1])){
count++;
}
// 输出空格数量
printf ("%d",count);
return 0;
}
1134:字符串转换
#include <stdio.h>
int main()
{
char arr[101];
int sum=0;
gets(arr);
int i=0;
for(i=0;arr[i]!='\0';i++)
{
if(arr[i]>='0'&&arr[i]<='9'){
sum=sum*10+arr[i]-'0';
}
}
sum=sum*2;
printf("%d",sum);
}
1135:算菜价
#include <stdio.h>
#include <stdlib.h>
int main()
{
double w,p,sum=0;
while(~scanf("%*s%lf%lf",&w,&p))
//与!=EOF等价
{
sum=sum+w*p;
}
printf("%.1f\n",sum);
return 0;
}
1136:首字母变大写
#include <stdio.h>
#include <string.h>
int main()
{
char a[100];
gets(a);
int i;
for(i=0;a[i]!='\0';i++)
{
if(a[i]==' '&&a[i+1]!=' ')
{
if(a[i+1]>='a'&&a[i+1]<='z')
a[i+1]=a[i+1]-32;
}
}
if(a[0]>='a'&&a[0]<='z')
a[0]=a[0]-32;
puts(a);
return 0;
}
1137:查找最大元素
#include <stdio.h>
#include <string.h>
int main()
{ int i;
int j;
char arr[1000];
gets(arr);
int sum[1000]={0};
int x=strlen(arr);
char max=arr[1];
for(i=0;i<x;i++){
if(arr[i]>max)
{
max=arr[i];
}
}
for(i=0;i<x;i++){
if(max==arr[i]){
printf("%c(max)", arr[i]);}
else{
printf("%c", arr[i]);}
}
return 0;
}
1138:C语言合法标识符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char a[51];
int i=0;
int count=0;
gets(a);
int x=strlen(a);
if((a[0]>='a'&&a[0]<='z')||(a[0]>='A'&&a[0]<='Z')||(a[0]=='_'))
{
for(i=0;i<x;i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')||(a[i]=='_')||(a[i]>='0'&&a[i]<='9'))
{
count++;
}
}
if(count==x)
{
printf("yes");
}
else{
printf("no");
}
}
else{
printf("no");
}
return 0;
}
1139:输出最短字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
int i=0;
char min[1001],max[1001];
scanf("%d",&n);
getchar();
gets(max);
strcpy(min,max);
for(i=1;i<n;i++)
{
gets(max);
if(strlen(max)<strlen(min)){
strcpy(min,max);
}
}
puts(min);
return 0;
}
1140:小数点后第n位 多实例
#include <stdio.h>
#include <string.h>
int main()
{
int t,n;
scanf("%d",&t);
int i,j;
char a[1000];
for(i=0;i<t;i++)
{
scanf("%s%d",a,&n);
for(j=0;a[j]!='\0';j++)
{
if(a[j]=='.')
{
break;
}
}
if((j+n)<strlen(a))
{
printf("%c\n",a[j+n]);
}
else printf("0\n");
}
return 0;
}
python
n=int(input())
for x in range(n):
a,b=input().split()
a=a.split('.')
if(int(b)<=len(a[1])):
print(a[1][int(b)-1])
else:
print(0)
1141:进制转换
#include <stdio.h>
void convert(int n, char str[]);
int main()
{
int n;
char str[100001];
convert(n,str);
return 0;
}
void convert(int n, char str[]){
int t=0;
int i=0;
int g;
int h=0;
scanf("%d",&n);
while(n!=0)
{
str[h++]=n%2;
n=n/2;
t++;
}
for(i=t-1;i>=0;i--){
if(str[i]!=0)
{
g=i;
break;
}
}
for(i=g-1;g>=0;g--){
printf("%d",str[g]);
}
}
1142:二进制数的大小
#include <stdio.h>
#include<string.h>
#include <math.h>
int bToD(char str[]);
void c(int brr[],int n);
void swap(int* g,int* h);
int main()
{
char str[31];
int a[3];
int i=0;
for(i=0;i<3;i++)
{
scanf("%s",str);
a[i]=bToD(str);
}
c(a, 3);
for(i=0;i<3;i++)
{
printf("%d ", a[i]);
}
return 0;
}
void c(int brr[],int n){
int i,j;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(brr[i]>brr[j]){
swap(&brr[i],&brr[j]);
}
}
}
}
void swap(int* g,int* h){
int t= *g;
*g=*h;
*h = t;
}
int bToD(char str[]){
int x=strlen(str);
int sum=0;
for(int i=0;i<x;i++)
{
if(str[i]=='1'){
sum=sum+pow(2,x-i-1);
}
else{
sum=sum+0;
}
}
return sum;
}
答案2:(来自徐佬)
#include <stdio.h>
#include <string.h>
int bToD(char str[])
{
int num=0;
int j;
for(j=0;j<strlen(str);j++)
{
num=num*2+(str[j]-'0');
}
return num;
}
int main()
{
char str[1000000];
int a[3];
for(int i=0;i<3;i++)
{
scanf("%s",str);
a[i]=bToD(str);
}
int t;
if(a[0]>a[1])
{
t=a[0];
a[0]=a[1];
a[1]=t;
}
if(a[2]>a[1])
{
t=a[2];
a[2]=a[1];
a[1]=t;
}
if(a[0]>a[2])
{
t=a[0];
a[0]=a[2];
a[2]=t;
}
printf("%d %d %d",a[0],a[2],a[1]);
return 0;
}
1143:最大值—多种进制
#include <stdio.h>
#include <string.h>
// 函数原型声明
int KToD(char str[], int k);
// 最大值多进制
int main() {
char str[10000];
int n, k, i;
int t, max = 0;
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%s %d", str, &k);
t = KToD(str, k);
if(max< t)
max = t;
}
printf("%d", max);
return 0;
}
int KToD(char str[], int k){
int i, sum = 0;
for(i = 0; str[i] != '\0'; i++){
sum = sum * k + (str[i] - '0');
}
return sum;
}
1144:多种进制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dToK(int n, int k, char str[])
{
int i=0,len;
while(n>0)
{
str[i]=n%k+'0';
n=n/k;
i++;
}
str[i]='\0';
len=strlen(str);
for(i=len-1;i>=0;i--)
printf("%c",str[i]);
printf("\n");
}
int main()
{
int n;
scanf("%d",&n);
char str[1000];
dToK(n,2,str);
dToK(n,3,str);
dToK(n,7,str);
dToK(n,8,str);
return 0;
}
1145:有问题的里程表(2)
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char ch[10];
gets(ch);
int sum=0;
int x=strlen(ch);
for(i=0;i<x;i++){
if(ch[i]>'4'){
ch[i]--;
}
sum=sum*9+ch[i]-'0';
}
printf("%d",sum);
return 0;
}
1146:吃糖果
#include <stdio.h>
int main()
{
int n;
int t=0;
int sum=0;
int max=0,i=0;
int x=0;
int q=0;
int h=0;
scanf("%d",&n);
for(i=0;i<n;i++){
max=sum=0;
scanf("%d",&t);
for(h=0;h<t;h++){
scanf("%d",&q);
sum=sum+q;
if(q>max){
max=q;
}
}
if(sum-max>=max-1){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
1147:查找子数组
#include <stdio.h>
int main()
{
int a[101],b[101];
int m,n;
int i,j,flog;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
for(i=0;i<n;i++)
{
if(a[i]==b[0])
{
flog=i;
for(j=0;j<m;j++)
{
if(a[i+j]!=b[j])
{
break;
}
}
}
}
if(j==m)
{
printf("%d\n",flog);
}
else printf("No Answer\n");
return 0;
}
python
a,b=map(int,input().split())
c=list(map(int,input().split()))
d=list(map(int,input().split()))
for i in range(a):
if c[i:i+b]==d:
print(i)
exit()
print("No Answer")
1148:组合三位数之一
#include <stdio.h>
int PanDuan(int a,int b,int c)
{
int s[10]={0};
while(a)
{
s[a%10]=1;
a/=10;
}
while(b)
{
s[b%10]=1;
b/=10;
}
while(c)
{
s[c%10]=1;
c/=10;
}
for(int i=1;i<10;i++)
{
if(s[i]==0)
return 0;
}
return 1;
}
int main()
{
int a[30];
int t;
for(int i=10;i<33;i++)
{
if(i*i>100&&i*i<1000)
a[t++]=i*i;
}
for(int i=0;i<t;i++)
for(int j=i+1;j<t;j++)
for(int k=j+1;k<t;k++)
{
if(PanDuan(a[i],a[j],a[k]))
printf("%d %d %d\n",a[i],a[j],a[k]);
}
}
1149:组合三位数之二
#include <stdio.h>
int PanDuan(int a,int b,int c)
{
int ret=1;
int s[10]={0};
if(a*2!=b||a*3!=c)
ret=0;
while(a)
{
s[a%10]=1;
a/=10;
}
while(b)
{
s[b%10]=1;
b/=10;
}
while(c)
{
s[c%10]=1;
c/=10;
}
for(int i=1;i<10;i++)
{
if(s[i]==0)
ret=0;
}
return ret;
}
int main()
{
for(int i=100;i<333;i++)
{
if(PanDuan(i,i*2,i*3))
printf("%d %d %d\n",i,i*2,i*3);
}
}
1150:数数多少个整数
#include<stdio.h>
#include<ctype.h>
int main()
{
char arr[1000],sum=0,flag=0;
gets(arr);
for(int i=0;arr[i]!='\0';i++)
{
if(isdigit(arr[i])&&flag==0)
{
if(arr[i]=='0'&&isdigit(arr[i+1]))//判断0123 这种
{
sum++;
flag=0;
continue;//0记一个数字 进入下一次循环
}
sum++;//判断123这种
flag=1;//改变flag防止后续被计算到内
}
if(!isdigit(arr[i]))//当当前字符不是数字字符 改变flag为0
flag=0;
}
printf("%d\n",sum);
return 0;
}
THE END
暂无评论内容