帮一个 c语言小白 盆友撸代码,改进的空间还有很大,希望大神多多指教!
一、组合数的和
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
输入格式:
输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字。数字间以空格分隔。
输出格式:
输出所有可能组合出来的2位数字的和。
输入样例:
3 2 8 5
输出样例:
330
代码如下:
#include<stdio.h>
int main()
{
int N,arr[10],i,j,sum = 0;
scanf("%d",&N);
for(i = 0; i < N; i++){
scanf("%d",&arr[i]);
}
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
if(i != j){
sum = sum + (arr[i] * 10 + arr[j]);
}
}
}
printf("%d",sum);
return 0;
}
二、数字加密
输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
输入格式:
输入在一行中给出一个四位的整数x,即要求被加密的数。
输出格式:
在一行中按照格式“The encrypted number is V”输出加密后得到的新数V。
输入样例:
1257
输出样例:
The encrypted number is 4601
代码如下:
#include<stdio.h>
void reverseNum(int n);
int main()
{
int x;
scanf("%d",&x);
reverseNum(x);
return 0;
}
void reverseNum(int n){
int arr[30],i = 0, count = 0,temp;
while(1){
arr[i] = ((n % 10) + 9) % 10;
count++;
n /= 10;
i++;
if(count == 4){
break;
}
}
for(i = 0; i < count; i++){
if(i == 0 || i == 2){
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
printf("The encrypted number is ");
for(i = 0; i < count; i++){
printf("%d",arr[i]);
}
}
三、求矩阵各行元素之和
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:
3 2
6 3
1 -8
3 12
输出样例:
9
-7
15
代码如下:
#include<stdio.h>
int main()
{
int m,n,i,j;
scanf("%d %d",&m,&n);
int a[100][6];
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
scanf("%d",&a[i][j]);
}
}
for(i = 0; i < m; i++){
for(j = 1; j < n; j++){
a[i][0] += a[i][j];
}
}
for(i = 0; i < m; i++){
printf("%d",a[i][0]);
printf("\n");
}
return 0;
}
四、求二维数组中的最大值和最小值
编写程序,输入一个3×3的二维整数数组,输出其中最大值、最小值。
输入格式:
输入9个整型数到二维数组a[3][3],数据之间用一个空格分隔。
输出格式:
输出数组a的最大值和最小值
输入样例:
在这里给出一组输入。例如:
1 2 3 4 5 6 7 8 9
输出样例:
在这里给出相应的输出。例如:
max=9 min=1
代码如下:
#include<stdio.h>
int main()
{
int arr[3][3],i,j,max,min;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
scanf("%d",&arr[i][j]);
}
}
max = arr[0][0];
min = arr[0][0];
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
if(max < arr[i][j]){
max = arr[i][j];
}
if(min > arr[i][j]){
min = arr[i][j];
}
}
}
printf("max=%d min=%d",max,min);
return 0;
}
五、字符串排序
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue green white
输出样例:
After sorted:
blue
green
red
white
yellow
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char str[5][80],temp[80];
int i,j;
for(i = 0; i < 5; i++){
scanf("%s",str[i]);
}
for(i = 0; i < 5; i++){
for(j = i + 1; j < 5; j++){
if(strcmp(str[i],str[j]) > 0){
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
}
printf("After sorted:\n");
for(i = 0; i < 5; i++){
puts(str[i]);
}
return 0;
}
六、评委打分
班级里要搞智力竞赛啦!同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分,最后结果如何呢?
输入格式:
第一行有十个整数,表示十位同学的初始分。第二行一个整数n,表示有n道题竞赛。 接下去有n行,每行有一个数字x,x表示本次可以加分的选手序号(每次答对者得10分)。
输出格式:
10个同学最终的得分值,每两位同学之间有一个空格。
输入样例:
10 0 0 0 10 10 0 0 0 10
3
1
10
1
输出样例:
30 0 0 0 10 10 0 0 0 20
代码如下:
#include<stdio.h>
int main()
{
int n,arr[10],arr2[10],i;
for(i = 0; i < 10; i++){
scanf("%d",&arr[i]);
}
scanf("%d",&n);
for(i = 0; i < n; i++){
scanf("%d",&arr2[i]);
}
for(i = 0; i < n; i++){
switch(arr2[i]){
case 1:
arr[0] += 10;
break;
case 2:
arr[1] += 10;
break;
case 3:
arr[2] += 10;
break;
case 4:
arr[3] += 10;
break;
case 5:
arr[4] += 10;
break;
case 6:
arr[5] += 10;
break;
case 7:
arr[6] += 10;
break;
case 8:
arr[7] += 10;
break;
case 9:
arr[8] += 10;
break;
case 10:
arr[9] += 10;
break;
}
}
for(i = 0; i < 10; i++){
printf("%d",arr[i]);
if(i != 9){
printf(" ");
}
}
return 0;
}