竖式问题——巧用字符数组

竖式问题

题目:

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

 

样例输入:

2357

样例输出:

<1>

..775

X..33

-----

.2325

2325.

-----

25575

The number of solutions = 1

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char s[20],buf[99];//用于接受输入数字串
 6     int a,b,c,Count = 0;
 7     scanf("%s",s);//注意此处不需要取地址&
 8     for(int i=111;i<=999;i++)//遍历所有的三位数
 9     {
10         for(int j=11;j<=99;j++)//遍历所有的两位数
11         {
12             a = i*(j%10);//上面的乘数
13             b = i*(j/10);//下面的乘数
14             c = i*j;//结果
15             //进行是否满足要求的判断
16             sprintf(buf,"%d%d%d%d%d",i,j,a,b,c);//将整型数存入字符数组buf
17                                                     //便于进行判断
18             int ok = 1;
19             for(int k=0;k<strlen(buf);k++)
20                 if(strchr(s,buf[k])==NULL) ok = 0;
21             if(ok)
22             {
23                 Count++;
24                 printf("<%d>\n",Count);
25                 printf("%5d\nx%4d\n-----\n%5d\n%4d\n-----\n%5d\n",i,j,a,b,c);
26             }
27         }
28     }
29     printf("The number of the solutions = %d",Count);
30     return 0;
31 }

说明:

  1. 在C语言中,字符串其实就是字符数组——可以像处理普通数组一样处理字符串,只需要注意输入输出和字符串函数的使用。
  2. strchr  在字符串中查找单个字符

    函数原型:extern char *strchr(char *str,char character)

    参数说明:str为一个字符串的指针,character为一个待查找字符。

  所在库名:#include <string.h>

    函数功能:从字符串str中寻找字符character第一次出现的位置。

    返回说明:返回指向第一次出现字符character位置的指针,如果没找到则返回NULL。

  3.  printf输出到屏幕,fpringf输出到文件,sprintf输出到字符串

  4.  字符串只能用strcpy(a,b),strcmp(a,b),strcat(a,b)来执行“赋值”、“比较”和“连接操作”,上述函数都在string.h中声明

时间: 2024-10-05 23:09:24

竖式问题——巧用字符数组的相关文章

3.2 字符数组

习题 3-4 竖式问题 找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合.输入数字集合(相邻数字之间没有空格),输出所有竖式.每个竖式前应有编号,之后应有一个空行.最后输出解的总数.具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点). 样例输入:2357 样例输出:<1>..775X..33-----.23252325.-----25575The number of solutions =

[c语言]字符数组、字符串定义

C语言中字符串通常用字符指针和字符数组来定义: char* pS="abcdef"; char s[]="abcdef"; 这两种方式都会在结尾为字符串隐式补结束符'\0' 使得 strlen(pS); strlen(s); //均为6,未计算带'\0'的长度,拷贝字符串时,真实容量应+1: 若使用sizeof可以看到 sizeof(s)/sizeof(char);//这个值为7 所以在使用strncpy时切记strlen+1: 另,printf和strcpy等均以

大数运算——字符串操作结合“竖式计算“思想的实现

总体原则: 字符串转整形数组,然后按照“竖式计算”的思想,按位(对于数组来说,就是对应位置的元素)进行运算,同时处理进位.退位.最后将整形数组转换为字符串输出. Ps:1.字符串转整形,本文采取逆序存储的方式,即将字符串的低位(大数的高位)放置到整形数组的高位. 2.本文提供的四个四则运算方法,所有的输入值(大数)必须为正整数. 一.加法 加法运算遵循从低位到高位运算的法则.将字符串转换为整形数组后,两数组对应元素相加,结果存储至结果数组的相应元素位置.同时对相加后的元素进行整除和取余运算(整除

C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

字符数组的长度计算:必须以终止符'\0'作为边界,但对字符数组赋值时,有两种方式: 1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6 上式等价于: (2)char chs[7] = {'a', 'c', '0', 'z', '3','d', '/0'}; // 长度为6 也等价于: (3)char chs[] = {'a', 'c', '0', 'z', '3','d', '/0' }; // 长度为6 但不等

UVA-12333 Revenge of Fibonacci(竖式加法模拟 &amp; 字典树)

题目: 给出一个斐波那契数字的前缀,问第一个有这个前缀的数字在斐波那契数列中是第几个. 思路: 紫书提示:本题有一定效率要求.如果高精度代码比较慢,可能会超时. 利用滚动数组和竖式加法来模拟斐波那契相加的过程,在这个过程中每得出一个斐波那契数字就用字典树存一下. PS:在滚动数组中存的斐波那契数字是逆序存储的. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1e9; #define FRE() freopen(&

C++中字符数组和字符串string

字符数组 C++中字符数组用char str[]可以用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,因为系统会自动补上一个'\0'作为字符串的结束标志.当然对于未初始化的也补'\0'. #include <iostream> #include <string> using namespace std; int main() { char str[11] = "I am happy"; // 系统会自动补上'\0'空

对比c++中的string与c中的字符数组的构造和初始化

string类的构造函数: string(const char *s);    //用c字符串s初始化string(int n,char c);     //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1:string s2="hello":都是正确的写法.当构造的string太长而无法表达时会抛出length_error异常 : 关于c中的字符数组: 请参考: http://blog.csdn.net/wangrunmin/article

实验九:二维数组和字符数组的应用

知识点: 二维数组的定义及引用:1.二维数组的定义: 二维数组的定义形式:类型名   数组名[行长度][列长度]:例如:        int  a[3][2]:        定义1个二维数组a,3行2列,6个元素: int   b[5][10]:        定义1个二维数组a,5行10列,50个元素: 二维数组的引用:行下标的范围:0~行长度-1:                        列下表的范围:0~列长度-1: 字符串的存储和运算可以用一维字符数组实现: 一维字符数组的定义

倒置字符数组中的字符

问题:如何把字符串 "We are the world" 转成 "world the are we" ?如果最多只能用两个额外的变量又该如何实现这样的转换? 分析:1.把字符串转成字符数组,然后对字符数组进行操作. 2.选择倒置字符数组的方法:用一个临时变量temp来交换两个字符,然后依次移动数组中的其他元素:利用 A=A+B, B=A-B, A=A-B 方式来交换两个字符. 3.根据数组中首尾字符的位置来倒置它们之间的字符. 4.优化方法:减少循环的次数,减少变量