C语言习题答案【7】(仅参考)

1070: 十进制转二进制

题目描述:

输入一个非负十进制整数,将其转换为二进制形式输出。

输入

7

输出

111

示例

#include<iostream> 
using namespace std; 
void turn(int n) {
	if(n!=0) {
		turn(n/2);
		printf("%d",n%2);
		return;
	} else { 
		return;
	}
}

int main() {
	int num;
	scanf("%d",&num);
	if(num==0) printf("%d",num);
	turn(num);
	return 0;
}
1071: 数列有序

题目描述:

一个非递减有序的整型数组有n个元素,给定一个整数num,将num插入该序列的适当位置,使序列仍保持非递减有序。

输入

5
1 2 4 5 6
3

输出

1 2 3 4 5 6

示例

#include<iostream>
#include<math.h>
using namespace std;
int main() {
	int num,i,n,a[1001];
	cin >> n;
	for(i=0; i<n; i++) {
		cin>>a[i];
	}
	cin >> num;
	for(i=n-1; i>0&&a[i]>num; i--) {
		a[i+1]=a[i];
	}
	a[i+1]=num;
	for(i=0; i<= n; i++) 	cout<<a[i]<<" ";
	return 0;
}
1072: 数组排序

题目描述:

对一维数组按照从小到大的顺序排序。

输入

6
6 5 1 2 3 4

输出

1 2 3 4 5 6

示例

#include<iostream>
#include<math.h>
using namespace std;
int main() {
	int n,a[100],i,k,j,temp;
	cin >> n;
	for(i=0; i<n; i++) {
		cin>>a[i];
	}

	for(i=0; i<n; i++) {
		for(k=i; k<n; k++) {
			if(a[i]>a[k]) {
				temp= a[k];
				a[k]=a[i];
				a[i]=temp;
			}
		}
	} 
	for(j=0; j<n; j++) {
		cout<<a[j]<<" ";
	} 
	return 0;
}
1073: 有序数组合并

题目描述:

已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中

输入

4 1 2 5 7
3 6 4 2

输出

7 6 5 4 2 2 1

示例

#include <iostream>
using namespace std;
const int N=1000000; 
int a[N],b[N],c[N*2];
int main()
{
	int m,n,i,j,k;
	cin>>m;
	for(i=0;i<m;i++)
		cin>>a[i];
	cin>>n;
	for(i=0;i<n;i++)
		cin>>b[i];
	i=m-1;j=0;k=0;
	while(i>=0&&j<n){
		if(a[i]>b[j]) c[k++]=a[i--];
		else c[k++]=b[j++];	
	}
	while (i>=0)
		c[k++]=a[i--];
	while(j<n)
		c[k++]=b[j++];
	for(i=0;i<m+n;i++)
		cout<<c[i]<<" ";
	return 0;
}
1074: 数组最小值

题目描述:

数组a有n个元素,请输出n个元素的最小值及其下标。若最小值有多个,请输出下标最小的一个。注意,有效下标从0开始。

输入

5
8 4 5 1 2

输出

1 3

示例

#include<iostream>
using namespace std; 
int main() {
	int n,a[20],min=9999,j;
	cin>>n;
	for(int i=0;i<n;i++) {
		cin>>a[i];
		if(min>a[i]) {
			min=a[i];
			j=i;
		}	
	}
	cout<<min<<" "<<j;
	
} 
1075: 最受欢迎歌手

题目描述:

学校推出了10名歌手,每个歌手都有唯一编号。校学生会想知道这些歌手受欢迎的程度,设了一个投票箱,让每一个同学给自己喜欢的歌手投票,同学们使用歌手编号进行投票。现在学生会找你帮忙统计一下每位歌手获得的票数,并颁发“最受欢迎歌手奖”,该奖项颁发给得票最多的歌手。若有多名歌手并列第一,则均可获奖。

输入

4 5 3 1 3 4 2 7 -1

输出

3 4

示例

#include<iostream>
using namespace std;
int main()  {  
	int a[11]={0};
	int n,max=-999;
	while(cin>>n && n>0) {
		a[n]++;
	}
	for(int i=1;i<11;i++) {
		if(max<a[i]) {
			max=a[i];
		}
	}
	for(int i=1;i<11;i++) {
		if(max == a[i]) {
			cout<<i<<" ";
		}
	}
}
1076: 查找元素位置

题目描述:

输入从小到大排好序的n个元素,找出某元素第一次出现的位置。

输入

5
3 5 6 6 7
6 

输出

3

示例

#include<iostream>
using namespace std;
int main() {  
	int n,a[20],find,j=0;
	cin>>n;
	for(int i=0;i<n;i++) {
		cin>>a[i];
	}
	cin>>find;
	for(j=0;j<n;j++) {
		if(find == a[j]) {
			cout<<j+1;
			break;
		}
	}
	if(j==n) {
		cout<<"-1";
	} 
}
1077: 数字字符加倍

题目描述:

输入一个以回车结束的字符串,该字符串由数字和字母组成。请过滤掉所有非数字字符,然后将数字字符串转换成十进制整数后乘以2输出。

输入

sg987aa65t498

输出

197530996

示例

#include<iostream>
#include<cmath>
using namespace std;
int main() 
{  
	long long k=0,sum=0;
	char a[20];
	string s;
	getline(cin,s);
	for(int i=0;i<s.length();i++)
	{
		if(isdigit(s[i]))
		{
			a[k++]=s[i];	
		}	
	}
	for(int i=0;i<k;i++)
	{
		sum=sum+(a[i]-'0')*pow(10,k-1-i); 
	}	
	cout<<sum*2; 
}
1078: 报数字说英文

题目描述:

输入一个1到7之间的数字,表示星期一到星期日,输出相应的英文:Mon、Tue、Wed、Thur、Fri、Sat、Sun

输入

6

输出

Sat

示例

#include<iostream>
using namespace std; 
int main() {
	int n;
	cin>>n;
	switch(n) {
		case 1:cout<<"Mon";break;
		case 2:cout<<"Tue";break;
		case 3:cout<<"Wed";break;
		case 4:cout<<"Thur";break;
		case 5:cout<<"Fri";break;
		case 6:cout<<"Sat";break;
		case 7:cout<<"Sun";break;
	}
} 
1079: 二进制转十六进制

题目描述:

输入一个0和1字符组成的二进制字符串,请转换成十六进制。

输入

11010100101

输出

6A5

示例

#include<iostream>
#include<math.h>
using namespace std;  
int main() {
	int a,sum,shu[20],f=0,c;
	long long n;
	cin>>n;
	while(n!=0) {
		sum=0;
		a=n%10000;
		if(n/10000!=0) {
			for(int i=0;i<4;i++) {
				sum+=(a%10)*pow(2,i);
				a/=10;
			}
		} else {
			c=(int)log10(n)+1;
			for(int i=0;i<c;i++) {
				sum+=(a%10)*pow(2,i);
				a/=10;
			}
		}
		shu[f++]=sum;
		n/=10000;
	}
	for(int i=f-1;i>=0;i--) {
		if(shu[i]>=10) {
			char cc='A'+shu[i]-10;
			printf("%c",cc);
		} else cout<<shu[i];
	}
} 
1080: 单词统计

题目描述:

输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

输入

I love c++ programming

输出

4

示例

#include<iostream>
using namespace std; 
int main() {
	int n=0;
	string s;
	getline(cin,s);
	for(int i=0;i<s.length();i++) {
		if(isspace(s[i])) {
			n++;
		}
	}	
	cout<<n+1;
} 
1081: 最大字符串

题目描述:

输入三个字符串,输出其中按字典序最大的字符串。

输入

beijing shanghai guangzhou

输出

shanghai

示例

#include<iostream>
#include<cstring>
using namespace std;
int main()  {  
	char c[3][20];
	char a[20];
	string max;
	for(int i=0;i<3;i++) {
		cin>>c[i];
	}
	if(strcmp(c[0],c[1])>0) {
		if(strcmp(c[0],c[2])>0) {
			cout<<c[0];
		} else {
			cout<<c[2];
		}
	} else {
		if(strcmp(c[1],c[2])>0) {
			cout<<c[1];
		} else {
			cout<<c[2];
		}
	} 		
}
1082: 上三角矩阵

题目描述:

输入一个正整数n和n阶方阵a中的元素,如果a是上三角矩阵则输出“YES”,否则输出“NO”。上三角矩阵的主对角线(不包含主对角线)以下元素均为0。

输入

4
1 2 3 4
0 5 6 7
0 0 8 9
0 0 0 10

输出

YES

示例

#include <iostream> 
using namespace std; 
int main() {
    int a[20][20];
    int n, flag = 0;
    cin >> n;
    for (int i = 0; i < n; i++)  {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (a[i][j] != 0)  {
                flag = 1;
            }
        }
    }
    if (flag == 0) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
}
1083: 矩阵乘积

题目描述:

计算两个矩阵A和B的乘积。

输入

2 3 4

1 0 1
0 0 1

1 1 1 3
4 5 6 7
8 9 1 0

输出

9 10 2 3
8 9 1 0

示例

#include <iostream> 
using namespace std;  
int main() {
    int m, p, n, a[10][10], b[10][10], sum = 0;
    cin >> m >> p >> n;
    for (int i = 0; i < m; i++)  {
        for (int j = 0; j < p; j++)  {
            cin >> a[i][j];
        }
    }
    for (int i = 0; i < p; i++) {
        for (int j = 0; j < n; j++)  {
            cin >> b[i][j];
        }
    }

    for (int k = 0; k < m; k++)  {
        for (int i = 0; i < n; i++)   {
            for (int j = 0; j < p; j++)  {
                sum += a[k][j] * b[j][i];
            }
            cout << sum << " ";
            sum=0;
        }
        cout<<endl;
    }
}
1084: 最多字母

题目描述:

输入一个字符串,输出字符串中出现次数最多的字母。

输入

A ab abc

输出

a

示例

#include<iostream>
using namespace std;
int main()  {  
	int b[26]={0};
	int n=0,max=0,maxi;
	string s;
	getline(cin,s);
	for(int i=0;i<s.length();i++) {
		 if(s[i]<='Z' && s[i]>='A')  {
		 	n=s[i]-'A';
		 	b[n]++;
		 } else if(s[i]<='z' && s[i]>='a') {
		 	n=s[i]-'a';
		 	b[n]++;
		 }
	}
	for(int i=0;i<26;i++) {
		if(max<b[i]) {
			max=b[i];
			maxi=i;
		}
	}
	printf("%c",'a'+maxi);
}
1085: 所在年第几天

题目描述:

输入一个日期,输出该日期是所在年的第几天。

输入

2021 1 29

输出

29

示例

#include<iostream> 
using namespace std; 
struct Day{
    int year;
    int month;
    int day; 
};
   
void yDay(Day d) {
    int num;
    if(d.year%400==0||d.year%100!=0&&d.year%4==0)  {
        switch(d.month)  {
            case 1:num=d.day;break;
            case 2:num=d.day+31;break;
            case 3:num=31+29+d.day;break;
            case 4:num=d.day+31+29+31;break;
            case 5:num=d.day+31+29+31+30;break;
            case 6:num=d.day+31+29+31+30+31;break;
            case 7:num=d.day+31+29+31+30+31+30;break;
            case 8:num=d.day+31+29+31+30+31+30+31;break;
            case 9:num=d.day+31+29+31+30+31+30+31+31;break;
            case 10:num=d.day+31+29+31+30+31+30+31+31+30;break;
            case 11:num=d.day+31+29+31+30+31+30+31+31+30+31;break;
            case 12:num=d.day+31+29+31+30+31+30+31+31+30+31+30;break;
        }
    }
    else {
        switch(d.month)  {
            case 1:num=d.day;break;
            case 2:num=d.day+31;break;
            case 3:num=31+28+d.day;break;
            case 4:num=d.day+31+28+31;break;
            case 5:num=d.day+31+28+31+30;break;
            case 6:num=d.day+31+28+31+30+31;break;
            case 7:num=d.day+31+28+31+30+31+30;break;
            case 8:num=d.day+31+28+31+30+31+30+31;break;
            case 9:num=d.day+31+28+31+30+31+30+31+31;break;
            case 10:num=d.day+31+28+31+30+31+30+31+31+30;break;
            case 11:num=d.day+31+28+31+30+31+30+31+31+30+31;break;
            case 12:num=d.day+31+28+31+30+31+30+31+31+30+31+30;break;
        }
    }
    cout<<num<<endl;    
}
   
int main()
{
    Day dd;
    int a,b,c;
    cin>>a>>b>>c;
    dd.year = a;
    dd.month = b;
    dd.day = c;
    yDay(dd);
     
} 
1086: 选美大赛

题目描述:

某地区选美大赛总共有 n 个选手(编号从1到 n ), m 个评委。每个评委只能拿到一张选票,每张选票可为编号 L 到 R 的选手加上一分。现在让您找出得分最高的选手。

输入

5 8
2 3
2 4
3 5
4 4
2 4
3 3
4 5
2 3

输出

3

示例

#include <iostream>
using namespace std;
int a[100050]; 
int main()
{	
	int n,m;
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int l,r;
		cin>>l>>r;
		a[r+1]--;
		a[l]++;
	}
	int max=0;
	for(int i=1;i<=n;i++){
		a[i]=a[i]+a[i-1];
		if(a[i]>max)max=a[i];
	}
	int flag=0;
	for(int i=0;i<=n;i++){
		if(a[i]==max)
			if(flag==0) cout<<i,flag=1;
			else cout<<" "<<i;
			
	} 
	return 0; 
}
1087: 杨辉三角

题目描述:

输出杨辉三角形。

输入

4

输出

1       
1       1       
1       2       1       
1       3       3       1    

示例

#include<iostream> 
using namespace std; 
int main() {
	int n,a[20][20];
	cin>>n;
	for(int i=0;i<n;i++) {
		a[i][i]=a[i][0]=1;
	}
	for(int i=2;i<n;i++) {
		for(int j=1;j<i;j++)
			a[i][j]=a[i-1][j-1]+a[i-1][j];
	}
	for(int i=0;i<n;i++) {
		for(int j=0;j<=i;j++) {
			printf("%-8d",a[i][j]);
		}
		cout<<endl;
	 }  
} 
1088: 矩阵对角线元素之和

题目描述:

求一个3×3的整型矩阵对角线元素之和。

输入

1 2 3
4 5 6
9 8 7

输出

13

示例

#include <iostream> 
using namespace std; 
int main() {
    int a[3][3],sum = 0;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> a[i][j];
            if (i == j)  {
                sum += a[i][j];
            }
        }
    }
    cout << sum;
}
1089: 数组元素逆置

题目描述:

将一个长度为10的整型数组中的值按逆序重新存放。
如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1

输入

1 2 3 4 5 6 7 8 9 0

输出

0 9 8 7 6 5 4 3 2 1

示例

#include <iostream> 
using namespace std; 
int main() {
    int a[10];
    for (int i = 0; i < 10; i++) {
        cin >> a[i];
    }
    for (int j = 9; j >= 0; j--) {
        cout << a[j]<<" ";
    }
}
1090: 字符统计(二)

题目描述:

有一篇文章,共3行文字,每行不到80个字符。要求分别统计每行中字母、数字、空格以及其他字符的个数。

输入

I am a student!
I'm 18 years old.
One Two Three 1 2 3!@#

输出

11 0 3 1
10 2 3 2
11 3 5 3

示例

#include <iostream> 
using namespace std; 
int main() {
    for (int i = 0; i < 3; i++)  {
        int zm = 0, sz = 0, kg = 0, qt = 0;
        string a;
        getline(cin, a);
        for (int i = 0; i < a.length(); i++)  {
            if (isdigit(a[i]))  {
                sz++;
            }
            else if (a[i] <= 'Z' && a[i] >= 'A' || a[i] <= 'z' && a[i] >= 'a')  {
                zm++;
            }  else if (!isgraph(a[i]))  {
                kg++;
            }   else   {
                qt++;
            }
        }
        printf("%d %d %d %d\n", zm, sz, kg, qt);
    }
}
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小源同学r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值