第六届蓝桥杯大赛省赛c语言c组(6-9)

6.

奇妙的数字

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?


请填写该数字,不要填写任何多余的内容。

思路:用一个数组来计算每个数字分别被用的频率。该数的平方或立方依次取余的值即为数组下标的值。

#include 
void main()
{
    /*
    int p,l;//平方  立方
    int n,i;//当前数  循环控制
    int a[10];//定义数组来存放使用到的数字
    
    for(n=10;n<100;n++)//循环结束的位置暂且定为100,100的立方和平方的数字使用个数已经超过10
    {
        for(i=0;i<10;i++)//赋初值
            a[i]=0;
     
        p=n*n;
        while(p>0)
        {
            a[p%10]++;//取余的数的使用频率
            p=p/10;
        }
        
        l=n*n*n;
        while(l>0)
        {
            a[l%10]++;
            l=l/10;
        }
        
        for(i=0;i<10;i++)//如果存在不为1的则说明,不符合题意
            if(a[i]!=1)
                break;

        if(i==10)//如果上个循环正常结束,则满足题意,输出
        {
            printf("%d\n",n);
            break;
        }
    }
*/
    //该方法和上个其实没有本质的区别,只是,判断的方式变换一下
    int a[10];
    int n,count;
    int p,l;
    
    for(n=1;n<1000;n++)
    {
        for(int i=0;i<10;i++)
            a[i]=-1;
        
        count=0;
        p=n*n;
        while(p>0)
        {
            if(a[p%10]==-1)
                a[p%10]=-2;
            else
                break;
            p=p/10;
        }
        
        if(p>0)
            continue;
        
        l=n*n*n;
        while(l>0)
        {
            if(a[l%10]==-1)
                a[l%10]=-2;
            else
                break;
            l=l/10;
        }
        
        if(l>0)
            continue;
        
        for(count=0;count<10;count++)
        {
            if(a[count]!=-2)
                break;
        }
        if(count>=10)
            printf("%d\n",n);
    }
}
7.

加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015

比如:
1+2+3+...+10*11+12+...+27*128+29+...+49 = 2015

就是符合要求的答案。


请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。


注意:需要你提交的是一个整数,不要填写任何多余的内容。

思路:用双重循环来控制乘法的位置,直到找到满足条件的值

#include //加法变乘法
void main()
{
    for(int i=1;i<=46;i++)
    {
        for(int j=i+2;j<49;j++)//两个乘号不能相邻
        {
          //if(i*(i+1)+j*(j+1)==2015-1225-i-j-(i+1)-(j+1))// 错的:
            if(i*(i+1)+j*(j+1)+1225-i-j-(i+1)-(j+1)==2015)
                printf("%d\n",i);
        }
    }
}

8.

饮料换购


乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。


请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。


输入:一个整数n,表示开始购买的饮料数量(0 输出:一个整数,表示实际得到的饮料数


例如:
用户输入:
100
程序应该输出:
149


用户输入:
101
程序应该输出:
151


资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。


注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。


提交时,注意选择所期望的编译器类型。

#include 
void main()
{
    int n,m,count,y;
    scanf("%d",&n);
    m=n;
    y=m%3;//除去换掉的瓶盖剩下的盖子,用来下次换
    m=m/3;//换了多少瓶
    count=0;
    while(m>0)
    {
        count+=m;
        m=m+y;//加上上次剩下的瓶盖
        y=m%3;
        m=m/3;
    }
    printf("%d",n+count);
}

9.

打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。


要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0 要求输出一个大X


例如,用户输入:
3 9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***


(如有对齐问题,参看【图1.jpg】)


再例如,用户输入:
4 21
程序应该输出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****


(如有对齐问题,参看【图2.jpg】)


资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

第六届蓝桥杯大赛省赛c语言c组(6-9)_第1张图片第六届蓝桥杯大赛省赛c语言c组(6-9)_第2张图片


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。


注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。


提交时,注意选择所期望的编译器类型。

#include 

void main()
{
    int m,n
    char a[100][100];
    int w,i,j;
    scanf("%d",&m);
    scanf("%d",&n);
    w=m+n-1;//代表整个数组的宽度 看图可找到规律
    for(i=0;i




你可能感兴趣的:(第六届蓝桥杯大赛省赛c语言c组(6-9))