BJFU|C++程序设计基础(22上)实验0-C语言回顾

仅供课外学习使用,任何个人与机构不得利用此文章进行任何形式的作弊。

A:A + B

题目:

描述:

帅气的3C哥参加了一场考试,已知考试共五科,现知道他每科的成绩,求3C哥的总成绩。

输入:

输入一行,输入5个整数,表示3C哥每科成绩,范围在[0, 100]内。

输出:

输出一行,输出1个整数,表示3C哥的总成绩

输入样例1:

98 95 87 100 90

输出样例1:

470

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
int main()
{
	int a[5];
	int i,sum=0;
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
		sum+=a[i];
	}
	printf("%d",sum);
	return 0;
}

B:3n + 1问题

题目:

描述:

对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半;经过若干次这样的变换,一定会使n变为1。比如:
3->10->5->16->8->4->2->1

要求:

输入n,输出变换的次数。

输入:

输入一行,输入一个正整数n,1 <= n <= 100。

输出:

输出一行,输出一个正整数,表示变换的次数。

输入样例1:

3

输出样例1:

7

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
int main()
{
	int n,cnt=0;
	scanf("%d",&n);
	for(;n!=1;)
	{
		if(n%2==1)
		{
			n = 3*n+1;
			cnt++;
		}
		else
		{
			n = n/2;
			cnt++;
		}
	}
	printf("%d",cnt);
	return 0;
 }


C:稀疏矩阵

题目:

描述:

大部分元素为0的矩阵称为稀疏矩阵。假设有k个非0元素,则可把稀疏矩阵用k*3的矩阵简记之,其中第一列为行号,第二列为列号,第三列是该行、该列下的非0元素的值。

输入:

首先输入一行,输入两个正整数,表示稀疏矩阵的行号和列号,再输入一个稀疏矩阵,行和列不超过100。

输出:

输出它的简记形式,按从上到下,从左到右的顺序依次输出。每一行输出3个整数,每两个整数之间一个空格,最后一个整数后面没有空格。

输入样例1:

3 4
0 0 0 5
0 2 0 0
0 1 0 0

输出样例1:

1 4 5 
2 2 2  
3 2 1

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
int main()
{
	int m,n;
	int i,k;
	int cnt[100][100],ret[100][100],t[100][100];
	for(i=0;i<100;i++)
	for(k=0;k<100;k++)
	{	
		cnt[i][k]=0;
		t[i][k]=0;
	}
	scanf("%d%d",&m,&n);
	int a[100][100];
	for(i=0;i<m;i++)
		for(k=0;k<n;k++)
			scanf("%d",&a[i][k]);
	for(i=0;i<m;i++)
	{	
		int temp = 0;
		for(k=0;k<n;k++)
		{
			if(a[i][k]==0)
			{
				cnt[i][temp]++;
			}
			else
			{
				cnt[i][temp]++;
				printf("%d %d %d\n",i+1,cnt[i][temp],a[i][k]);
				temp++;
				cnt[i][temp] = cnt[i][temp-1];
			}
		}
	}
	return 0;
}


D:开灯问题

题目:

描述:

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。一共有k个人,问最后有哪些灯开着?

输入:

输入一行,输入两个正整数n和k。(k<=n<=1000)

输出:

输出一行,输出所有开着的灯的编号,每个编号后面跟一个空格。

输入样例1:

7 3

输出样例1:

1 5 6 7

提示:

可先使用string.h里的memset函数将数组全部置0;使用C语言的逻辑非(!)操作符

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
int main()
{
	//没有用提示,但不扣分 
	int n,k;
	scanf("%d%d",&n,&k);
	int a[1000],b[1000];
	int i,m,t=2;
	for(i=0;i<n;i++)
	{
		a[i] = 0;
		b[i] = i+1;
	}
	for(i=0;i<k-1;i++)
	{
		for(m=0;m<n;m++)
		if(b[m]%t==0)
		{
			if(a[m]==1)
				a[m]=0;
			else
				a[m]=1;
		}
		t++;
	}
	for(i=0;i<n;i++)
		if(a[i]!=1)
			printf("%d ",b[i]);
	return 0;
}

E:还是一个不妖艳的问题

题目:

描述:

U君与S君想测试下双方的缘分,测试规则是两人各想一个数字,如果两个数字互质则代表有缘分。

输入:

多组测试,每组测试输入两个数字m和n(m和n均不超过int取值范围),空格隔开。

输出:

对于每组,如果有缘分的话,输出“Yes”;否则,输出“No”

输入样例1:

10 5
17 13

输出样例1:

No
Yes

提示:

可使用 while (scanf("%d%d", &n, &m) != EOF) 完成多组输入

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
int gcd(int m,int n)
{
	while(n^=m^=n^=m%=n);
	return m;
}
 
int main()
{
	int m,n;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
	if(m<n)
	{
		int temp = m;
		m = n;
		n = temp;
	}
	int t=gcd(m,n);
	if(t==1)
		printf("Yes\n");
	else
		printf("No\n");
	}
	return 0;
 
}

F:回文串的排序

题目:

描述:

输入n个字符串,将其中是回文串的字符串,按照长度从小到大的顺序输出,如果长度相同,则按照输入的顺序输出即可。
回文的含义是:正着看和倒着看相同,如abba和yyxyy。

输入:

第一行首先是一个整数n(n<50),表示有n个字符串(每个字符串的都长度小于100)。接下来有n行,每行输入一个字符串。

输出:

按照长度从小到大的顺序输出其中的回文串,如果长度相同,则按照输入的顺序输出。

输入样例1:

4
abbb
abccba
abba
acca

输出样例1:

abba
acca
abccba

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
class huiwen
{
	public:
	char a[100];
}store[50];
  
int main()
{
	int n,i,k,cnt=0;
	scanf("%d",&n);
	char temp[100];
	
	for(i=0;i<n;i++)
	{
		int ret = 0;
		int k;
		scanf("%s",temp);
		int left = 0;
		int right = strlen(temp)-1;
		for(;;left++)
		{
		
			if(temp[left]!=temp[right])
				break;
			else
				ret++;
			if(ret==(strlen(temp)/2))
			{
				strcpy(store[cnt].a,temp);
				cnt++;
			}
			if(right%2==0)
				if(right-left==1)
					break;
			if(right%2!=0)
				if(right==left)
					break;
			right--;
		}
	}
 
	for(i=0;i<cnt;i++)
		for(k=0;k<cnt-i-1;k++)
			if(strlen(store[k].a)>strlen(store[k+1].a))
			{
				char s[100];
				strcpy(s,store[k].a);
				strcpy(store[k].a,store[k+1].a);
				strcpy(store[k+1].a,s);
			}
			
	for(i=0;i<cnt;i++)
		puts(store[i].a);
	return 0;
}

G:蛇形填数

题目:

描述:

在n*n方阵里填入1,2,…,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

输入:

本题为多组输入。每组数据输入一行,输入一个正整数n。n<=8。

输出:

输出n*n的蛇形矩阵,每行中每两个数之间用一个空格隔开,每行最后一个数后面没有空格。

输入样例1:

4

输出样例1:

10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

实例:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<windows.h>
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
	
	int count=1;
	int a[8][8];
	int i,j,t=0;
	while(count<=n*n)
	{
		for(i=n-1-t,j=0+t;j<n-1-t;j++)
			a[j][i] = count++;
		if(count>=n*n) break;
		for(i=n-1-t,j=n-1-t;i>0+t;i--)
			a[j][i] = count++;
		if(count>=n*n) break;
		for(i=0+t,j=n-1-t;j>0+t;j--)
			a[j][i] = count++;
		if(count>=n*n) break;
		for(i=0+t,j=0+t;i<n-1-t;i++)
			a[j][i] = count++; 
		if(count>=n*n) break;
		t++;
	}
 
	a[(n-1)/2][(n-1)/2] = n*n;
	int x,y;
	for(x = 0; x < n; x++)
  {
     for(y = 0; y < n; y++)
     {
	 if(y!=n-1)
        printf("%d ", a[x][y]);
     else
     	printf("%d", a[x][y]);
     }
     printf("\n");
  }
}
	return 0;
 }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CresCent_Charles

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

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

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

打赏作者

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

抵扣说明:

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

余额充值