P5730 【深基5.例10】显示屏 - 字符表问题
目录
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;
}