还是有不少经典题目的
Description
已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。
数组如下:
2 3 5 7 11 13 17 23 29 31 34 71 79 97 103
#include
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
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 n,i;
scanf("%d", &n);
for(i=14; i>=0; i--)//划重点
{
if(a[i]>n)
a[i+1]=a[i];//把左边的挪到右边,到n停止
else break;
}
a[i+1]=n;
display();
return 0;
}
Description
输入10个整数,计算它们的平均值,并统计有多少个数比平均值大。
输入格式
10个整数
输出格式
比平均值在的数的个数
输入样例
0 1 2 3 4 5 6 7 8 9
输出样例
5
代码如下(示例):
#include
int main()
{
int arr[10] = {0};
int i = 0,sum = 0,count = 0;
double average = 0.0;
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<10;i++)
{
sum = sum + arr[i];
}
average = sum/10.0;//用浮点数哦
for(i=0;i<10;i++)
{
if((double)arr[i]>average)
count++;
}
printf("%d\n",count);
return 0;
}
Description
输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次。
输入格式
输入10个整数
输出格式
依次输出不同的数字(一行一个,从上到下依次输出先出现的数)
输入样例
1 2 1 3 3 2 4 5 5 9
输出样例
1
2
3
4
5
9
代码如下:
#include
{
int arr[10] = {0};
int i = 0,j = 0;
for(i = 0; i<10; i++)
{
scanf("%d",&arr[i]);
}
for(i = 0; i<10; i++)//双重循环肯定可以解决这个问题,但是效率比较低
{
for(j = 0; j<i; j++)
{
if(arr[i] == arr[j])
break;
}
if(j == i)
{
printf("%d\n",arr[i]);
}
}
return 0;
}
Description
输入一个3行4列的整数矩阵,计算并输出主对角线上的元素之和
输入格式
3行4列整数矩阵
输出格式
主对角线上的元素之和
输入样例
1 2 3 4
5 6 7 8
9 10 11 12
输出样例
18
提示
1,6和11
代码如下:
#include
int main()
{
int i = 0,j = 0,arr[3][4];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&arr[i][j]);
}
}
printf("%d\n",arr[0][0]+arr[1][1]+arr[2][2]);
return 0;
}
Description
由键盘输入一个3*4(3行4列)的数字矩阵,其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98
70 97 210 65
99 45 120 30
输出样例
110
代码如下:
#include
#include
int main()
{
int i,j,a[3][4],flag=0,col,r;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{
col=0;
for(j=1;j<4;j++)
if(a[i][j]>a[i][col])
col=j;//关键。找到行的最大值对应的数字
for(j=0;j<4;j++)
{
if(a[i][j]==a[i][col])//注意现在的j
{
for(r=0;r<3;r++)
if(a[r][j]<a[i][j])//那一列的数字进行比较
break;//以防r=3了还继续r++,并且接着下面的if判断
if(r==3)
{
printf("%d\n", a[i][j]);
flag=1;
}
}
}
}
if(!flag)
printf("NO\n");
return 0;
}
Description
输入三行字符串(每行以换行回车为结束符),每行不超过80个字符。统计并输出其有多少个大写字母。
输入格式
三行字符串
输出格式
大写字母个数
输入样例
A-1 123
ABC abc
G
输出样例
5
代码如下:
#include
int main()
{
int i = 0,count = 0;
char ch;//char ch = getchar();这样写就是错的,因为这条语句在循环之外输入了一个字符
for(i=0;i<3;i++)
{
while((ch=getchar())!='\n')
{
if(ch>='A'&&ch<='Z')
{
count++;
}
}
}
printf("%d\n",count);
return 0;
}
Description
读入一行字符串(不多于80个字符,以回车结束),判断该字符串是否为回文串(即从左向右拼写与从右向左拼写是一样的),是则输出Y,不是则输出N。
输入格式
一行字符串
输出格式
是则输出Y,不是则输出N
输入样例
abba
输出样例
Y
提示
或
input:
abcba
output:
Y
或
input:
abc
output:
N
代码如下:
#include
#include
int main()
{
int i, j;
char buf[80];
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");
}
Description
输入两个字符串s1和s2(每个串占一行,以换行回车符结束),计算两个字符串的所有字符的ASCII码值之和的差。
输入格式
两行字符,第行字符不超过80个字符
输出格式
ASCII码值之和的差
输入样例
234
123
输出样例
3
代码如下:
#include
#include
int main()
{
char arr1[80],arr2[80];
int i = 0,u = 0,sum1 = 0,sum2 = 0,ret = 0;
gets(arr1);
gets(arr2);
for(i=0;arr1[i]!='\0';i++)
{
sum1 = sum1 + arr1[i];
}
for(u=0;arr2[u]!='\0';u++)
{
sum2 = sum2 + arr2[u];
}
ret = sum1 - sum2;
printf("%d\n",ret);
return 0;
}