首页 >> 大全

P5730 【深基5.例10】显示屏 - 字符表问题

2023-06-26 大全 52 作者:考证青年

目录

P5730 【深基5.例10】显示屏 - 字符表问题

P2141 [ 普及组] 珠心算测验 - 数组去重法

P1553 数字反转(升级版)- 细节​​​​​​​

P1205 [.2]方块转换 - 暴力模拟

P5730 【深基5.例10】显示屏 - 字符表问题

输出 #1

XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX
X.X...X...X...X.X.X.X...X.....X.X.X.X.X
X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX
X.X...X.X.....X...X...X.X.X...X.X.X...X
XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX

强行手动打表法:(表打完了考试也结束了)

#include
#include
#include
#include
#include
using namespace std;
char W[10][5][3]=//W[i][j][k]表示第i个数字的第j行的第k列,(手打累死了)
{{//0'X','X','X','X','.','X','X','.','X','X','.','X','X','X','X',},{//1'.','.','X','.','.','X','.','.','X','.','.','X','.','.','X',},{//2'X','X','X','.','.','X','X','X','X','X','.','.','X','X','X',},{//3'X','X','X','.','.','X','X','X','X','.','.','X','X','X','X',},{//4'X','.','X','X','.','X','X','X','X','.','.','X','.','.','X',},{//5'X','X','X','X','.','.','X','X','X','.','.','X','X','X','X',},{//6'X','X','X','X','.','.','X','X','X','X','.','X','X','X','X',},{//7'X','X','X','.','.','X','.','.','X','.','.','X','.','.','X',},{//8'X','X','X','X','.','X','X','X','X','X','.','X','X','X','X',},{//9'X','X','X','X','.','X','X','X','X','.','.','X','X','X','X',}
};
int n;
char s[110];
int main(){cin>>n;//输入nfor(int i=0;i>s[i];//输入要打印的字符}for(int i=0;i<5;i++){//枚举每一行for(int j=0;j

复制粘贴法:

#include
#includechar s[5][55] = {"XXX...X.XXX.XXX.X.X.XXX.XXX.XXX.XXX.XXX.","X.X...X...X...X.X.X.X...X.....X.X.X.X.X.","X.X...X.XXX.XXX.XXX.XXX.XXX...X.XXX.XXX.","X.X...X.X.....X...X...X.X.X...X.X.X...X.","XXX...X.XXX.XXX...X.XXX.XXX...X.XXX.XXX.",
};int main()
{int n;int len, i, x;int j, k;char str[110];scanf("%d", &n);scanf("%s", str);len = strlen(str);for (j = 0; j < 5; ++j)//有5行 {//打印除了最后一个字符外的第j行 for (i = 0; i < len - 1; ++i){x = str[i] - '0';for (k = 4 * x; k <= 4 * x + 3; ++k)//截下对应数字的4列 printf("%c", s[j][k]);}//魔鬼细节:最后的数字只有3列 x = str[i] - '0';for (k = 4 * x; k <= 4 * x + 2; ++k)printf("%c", s[j][k]);printf("\n");}return 0;
}

P2141 [ 普及组] 珠心算测验 - 数组去重法

难点:

数据元素不能重复

PS:初看题解只想到了相加两个元素不能重复

(实际不考虑,不同元素的值可能相同,只要考虑相加的元素表示的不是相同变量就行)

本题主要卡在计数时候并非只需对符合a+b=c的c的个数进行计数就行了,还要考虑c是否已经计入过。

也就是说,例如有1 2 3 4 5,1+4和2+3都等于5,但是只能算一个

#include
#include
#include
#include
#include
typedef long long LL;
const int N=1e5+10;
using namespace std;int n;
int ans[N],num[N];
int main()
{cin>>n;for(int i=0;i>ans[i];num[ans[i]]=1;    //用于检测是否用过}int sum=0;for(int i=0;i

P1553 数字反转(升级版)- 细节

给定一个数,请将该数各个位上数字反转得到一个新数。

这次与普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数只改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。

题目描述

给定一个数,请将该数各个位上数字反转得到一个新数。

这次与普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。

输入格式

一个数s

输出格式

一个数,即s的反转数

算法核心在于去掉前导零。

而整数部分、小数部分反转后,去除前导零的规则不同,需要分别讨论。

整数反转去除前导零:先将整数存成字符串s,然后从s[s.()-1]向s[0]遍历,若至s[0]还是0,就输出0。

小数反转去除前导零:先将小数存成字符串s,然后从s[0]向s[s.()-1]遍历,若至s[s.()-1]还是0,就输出0。

错误写法:75分

由数字反转改编的写法,大致思路是分成三部分,左右各反转一次,中间字符直接输出

#include
#include
#include
#include
#include
typedef long long LL;
const int N = 1e5 + 10;
using namespace std;int a[N], n;int fz(string fzs)
{int sz = 0,len=0;for (int i = 0; fzs[i] != '\0'; i++){len++;}for (int i = len - 1; i >= 0; i--){sz *= 10;sz += fzs[i] - '0';}return sz;
}int main()
{string s1, s3, s;char s2;int flag = 0, i, k = 0;cin >> s;s1 = s3 = s;for (i = 0; i < s.length(); i++){if (s[i] < '0' || s[i]>'9'){flag = 1;s1[i] = '\0';break;}s1[i] = s[i];}if (flag == 0){int ret = fz(s1);cout << ret;}else{s2 = s[i];for (++i; s[i] != '\0'; i++){s3[k++] = s[i];}s3[k] = '\0';int ret1 = fz(s1);if(s2=='%'){cout<

这样写的话当遇到600.084 会返回6.480;无法去除前导0

AC写法:(只能一步步细节死磕)

#include
using namespace std;
int main()
{string s;char p=0;//放符号 int cnt=0; cin>>s;for(int i=0;i='0'&&s[i]<='9') cnt++;//记录第一个数长度else    //遇到符号,记录,跳出 {p=s[i];break;} }int x=cnt;//记下第一个数末后一个的位置,也就是符号的位置,如果是分数或小数就要用 cnt--;while(s[cnt]=='0'&&cnt>0) cnt--;//去除多余前导0; for(int i=cnt;i>=0;i--)//输出第一个数 cout<x+1) m--; //去除多余前导0for(int i=m;i>x;i--)//输出第二个数 cout<

P1205 [.2]方块转换 - 暴力模拟

3
@-@
---
@@-
@-@
@--
--@

我地马呀,非常暴力的模拟题,嘎嘎一顿敲就完事儿了

《一题彻底搞懂模拟》

#include
using namespace std;
int n;
char a[15][15],b[15][15],c[15][15],d[15][15];bool check(char s[15][15]) {for(int i = 1;i <= n;i++) {for(int j = 1;j <= n;j++) {if(s[i][j] != c[i][j]) return false;}}return true;
}bool work1()
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)b[j][n-i+1]=a[i][j];}if(check(b)) return true;return false;
}
bool work2()
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)b[n-i+1][n-j+1]=a[i][j];}if(check(b)) return true;return false;
}
bool work3()
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)b[n-j+1][i]=a[i][j];}if(check(b)) return true;return false;
}
bool work4()
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)b[i][n-j+1]=a[i][j];}if(check(b)) return true;return false;
}
bool work5()
{work4();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)a[i][j]=b[i][j];  if(work1())return 1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)a[i][j]=b[i][j]; if(work2())return 1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)a[i][j]=b[i][j]; if(work3())return 1;return 0;
}
bool work6()
{if(check(b)) return true;return false;
}
void work()
{if(work1()){cout<<1;return ;}if(work2()){cout<<2;return ;}if(work3()){cout<<3;return ;}if(work4()){cout<<4;return ;}if(work5()){cout<<5;return ;}if(work6()){cout<<6;return ;}cout<<7;
}
int main()
{cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){cin>>a[i][j];d[i][j]=a[i][j];}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>c[i][j];work();return 0; 
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了