C语言-综合编程课-2020/12/18课堂课后代码

本篇博客介绍了C语言编程中的竖式问题解决方案,包括三位数乘以两位数的竖式计算,并展示了优化思路。此外,还探讨了字符串与整数之间的相互转换,以及求解最长回文子串的算法。通过代码示例和输出结果展示,帮助读者深入理解相关概念。
摘要由CSDN通过智能技术生成

1:竖式问题

描述
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。
在这里插入图片描述

上课截的图

在这里插入图片描述

上课时跟着敲的代码

//竖式问题,输入一个字符串,输出满足条件的所有竖式
#include <bits/stdc++.h>
const int N = 10 + 5;
//判断x和y的乘积竖式的所有数字都在s集合中 
int isValid(int x,int y,char s[]);
//拆数并判断
int isOk(int n,int f[10]);
//打印竖式 
void print(int x,int y);

int main(){
   
	char s[N];
	scanf("%s",s);
	int cnt = 0;		//问题的解
	//枚举每一个三位数 
	for(int i = 111;i <= 999;i++){
   
		//枚举每一个两位数 
		for(int j = 11;j <= 99;j++){
   
			if(isValid(i,j,s)){
   				//合法的竖式 
				printf("<%d>\n",++cnt);		//输出第几组解 
				print(i,j);
				printf("\n");
			}
		}
	}
	printf("The number of solutions=%d",cnt);
	return 0;
}

//拆数并判断 
int isOk(int n,int f[10]){
   
	while(n){
   
		int t = n % 10;		//拆个位数 
		n /= 10;			//去掉个位数 
		if(f[t] == 0){
   		//当前数在不在数字集合f中 
			return 0;
		}
	}
	return 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值