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);
}
}
}
饮料换购
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊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);
}
打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0
例如,用户输入:
3 9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***
(如有对齐问题,参看【图1.jpg】)
再例如,用户输入:
4 21
程序应该输出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****
(如有对齐问题,参看【图2.jpg】)
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: 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