写在前面:
本系列博客所有代码均为个人学习记录。并非标准例程,也不是最优解。遇到问题多点思考、少点借鉴,才能向前冲冲冲!
1、插入数据(题目编号:18052):
描述:
已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。
数组如下:
2 3 5 7 11 13 17 23 29 31 34 71 79 97 103
#include <stdio.h>
int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103};
void display()
{
int i;
for(i=0; i<16; i++) printf("%d ", a[i]);
}
int main()
{
_______________________
display();
return 0;
}
输入格式:
输入一个整数x
输出格式:
输出更新后的数组元素
输入样例:
5
代码实现(参考):
#include <stdio.h>
int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103};
void display()
{
int i;
for(i=0; i<16; i++) printf("%d ", a[i]);
}
int main()
{
int i,n;
scanf("%d",&n);
for(i=15;i>=0;i--){
a[i+1]=a[i]; //可以思考为什么倒着来
if(a[i-1]<=n)break;
}
a[i]=n;
display();
return 0;
}
系统标程(参考):
$block1$
int n,i;
scanf("%d", &n);
for(i=14; i>=0; i--)
if(a[i]>n) a[i+1]=a[i];
else break;
a[i+1]=n;
$end1$
2、大于平均分(题目编号:18053):
描述:
输入10个整数,计算它们的平均值,并统计有多少个数比平均值大。
输入格式:
10个整数
输出格式:
比平均值大的数的个数
输入样例:
0 1 2 3 4 5 6 7 8 9
输出样例:
5
代码实现(参考):
#include <stdio.h>
int a[10]={0};
int main()
{
int count=0;
double sun=0;
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<10;i++){
sun+=a[i];
}
for(int i=0;i<10;i++){
if(a[i]>sun/10.0)count++;
}
printf("%d",count);
return 0;
}
3、输出不同的数(题目编号:18054):
描述:
输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次。
输出格式:
依次输出不同的数字(一行一个,从上到下依次输出先出现的数)
输入样例:
1 2 1 3 3 2 4 5 5 9
输出样例:
1
2
3
4
5
9
代码实现(参考):
#include <stdio.h>
int a[10]={0};
int main()
{
double sun=0;
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<10;i++){
int flag=1;
for(int j=0;j<i;j++){
if(a[i]==a[j])flag=0;
}
if(flag)printf("%d\n",a[i]);
}
return 0;
}
系统标程(参考):
标程的思路更加简洁,值得学习
#include"stdio.h"
main()
{ int a[20];
int i,t,p=0;
for(i=0;i<10;i++)
{ scanf("%d",&a[i]);
for(t=0;t<i;t++)
if(a[t]==a[i])break;
if(t==i)
printf("%d\n", a[i]);
}
}
4、主对角线上的元素之和(题目编号:18055):
描述:
输入一个3行4列的整数矩阵,计算并输出主对角线上的元素之和
输入格式:
3行4列整数矩阵
输出格式:
主对角线上的元素之和
输入样例:
1 2 3 4
5 6 7 8
9 10 11 12
输出样例:
18
提示:
1、6和11
代码实现(参考):
#include <stdio.h>
int a[12];
int main()
{
int sun=0;
for(int i=0;i<12;i++){
scanf("%d",&a[i]);
}
sun = a[0]+a[5]+a[10]; //这题我直接迷惑
printf("%d",sun);
return 0;
}
没有标程就离谱
5、找矩阵中的鞍点(题目编号:1051):
描述:
由键盘输入一个3*4(3行4列)的矩阵,输出矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样。
输入样例:
87 90 110 98
70 97 210 65
98 45 120 30
输出样例:
110
代码实现(参考):
#include <stdio.h>
int a[3][4];
int main()
{
//输入
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
scanf("%d",&a[i][j]);
}
}
int flag,i,maxCol;
for(i=0;i<3;i++){
maxCol=0;
for(int j=1;j<4;j++){
if(a[i][j]>a[i][maxCol])maxCol=j;
}
flag=1;
for(int j=0;j<3;j++){
if(a[i][maxCol]>a[j][maxCol]&&j!=i)flag=0;
}
if(flag){
printf("%d",a[i][maxCol]);
return 0;
}
}
printf("NO");
return 0;
}
没写出来,抄标程的
6、字母统计(题目编号:18056):
描述:
输入三行字符串(每行以换行回车为结束符),每行不超过80个字符。统计并输出其有多少个大写字母。
输入格式:
三行字符串
输出格式:
大写字母个数
输入样例:
A-1 123
ABC abc
G
输出样例:
5
代码实现(参考):
#include <stdio.h>
int main(){
int i,j,count=0;
char ch;
for (i=1; i<=3; i++){
for (j=1; j<=80; j++){
ch=getchar();
if (ch>='A'&&ch<='Z')count++;
if (ch == '\n')break;
}
}
printf ("%d",count);
}
7、回文串(题目编号:1145):
描述:
读入一行字符串(不多于80个字符,以回车结束),判断该字符串是否为回文串(即从左向右拼写与从右向左拼写是一样的),是则输出Y,不是则输出N。
输入格式:
一行字符串
输出格式:
是则输出Y,不是则输出N
输入样例:
abba
输出样例:
Y
提示:
input:
abcba
output:
Y
或
input:
abc
output:
N
系统标程(参考):
#include "stdio.h"
#include "string.h"
main()
{
int i, j;
char buf[100];
scanf("%s",buf);
for(i=0, j=strlen(buf)-1;i<j; i++, j--)
if(buf[i]!=buf[j]) break;
if(i>=j)
printf("Y");
else
printf("N");
}
回文串是真的做了无数遍
8、ASCII码值之和的差(题目编号:18057):
描述:
输入两个字符串s1和s2(每个串占一行,以换行回车符结束),计算两个字符串的所有字符的ASCII码值之和的差。
输入格式:
两行字符,第行字符不超过80个字符
输出格式:
ASCII码值之和的差
输入样例:
234
123
输出样例:
3
代码实现(参考):
#include <stdio.h>
int main(){
int ascii1=0,ascii2=0;
for (int j=0; j<=80; j++){
char ch;
ch=getchar();
ascii1+=ch;
if (ch == '\n')break;
}
for (int j=0; j<=80; j++){
char ch;
ch=getchar();
ascii2+=ch;
if (ch == '\n')break;
}
printf ("%d",ascii1-ascii2);
}
系统标程:
#include <stdio.h>
int sum(char *s)
{
int t=0,i=0;
while(s[i]!='\0')
t+=s[i++];
return t;
}
int main()
{
char s1[81],s2[82];
gets(s1);
gets(s2);
printf("%d", sum(s1)-sum(s2));
return 0;
}
标程运用了指针、值得学习