【杂耍题】U155612 qwq i am cute (只用if和printf写题)

题目链接:https://www.luogu.com.cn/problem/U155612

题目有点问题,不能主动检测代码是否合法,就算你用while for,同样能过。但我这次写的的确是只使用if和printf的解法。

由于代码提交有文本上限,所以直接写肯定提交不了。所以我采用的方法的宏定义(宏定义不算,大概,也不知道能不能用函数,要不然递归也可以轻松解决,题目太不严谨)。

这个方法就是宏定义套宏定义。比如

#define p0 printf("qwq i am cute
");
#define p1 p0 p0

这只要写入p1 世界上代码编译时就会自动转换成p0 p0 然后再被转换成printf("qwq i am cute "); printf("qwq i am cute "); 就达到缩减文本的目的。

然后就是判断输出几个字符串的情况了,直接写if一个一个判断那肯定太麻烦了,文本量也大,所以我们按位判断。

把n看成一个二进制数,当他第一位是1就打印一个字符串,第二位是1就打印2个字符串,第三位是1就打印4个字符串,以此类推,第i位是1就打印2 ^ (i-1)个,第i位是0就不打印,最后打印的字符串的总和就是n的数量

代码

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<cstdio>
#include<ctime>
#define p0 printf("qwq i am cute
");
#define p1 p0 p0
#define p2 p1 p1
#define p3 p2 p2
#define p4 p3 p3
#define p5 p4 p4
#define p6 p5 p5
#define p7 p6 p6
#define p8 p7 p7
#define p9 p8 p8
#define p10 p9 p9
#define p11 p10 p10
#define p12 p11 p11
#define p13 p12 p12
using namespace std;
typedef long long ll;

signed main(){
    int n;
    scanf("%d",&n);

    //for(int i=0;i<13;i++){
    //    printf("#define p%d p%d p%d
",i+1,i,i);
    //}

    //for(int i=0;i<13;i++){
    //    printf("if(n>>%d&1){ p%d}
",i,i);
    //}
    if(n>>0&1){ p0}
    if(n>>1&1){ p1}
    if(n>>2&1){ p2}
    if(n>>3&1){ p3}
    if(n>>4&1){ p4}
    if(n>>5&1){ p5}
    if(n>>6&1){ p6}
    if(n>>7&1){ p7}
    if(n>>8&1){ p8}
    if(n>>9&1){ p9}
    if(n>>10&1){ p10}
    if(n>>11&1){ p11}
    if(n>>12&1){ p12}

    scanf(" ");
}
原文地址:https://www.cnblogs.com/komet/p/14567535.html