打印图形
题解:代码填空题中,目前有两大类,一种是递归,另一种是其他。根据上下代码进行判断,蒙((* ̄︶ ̄))。
奇怪的分式
上小学的时候,小明经常自己发明新算法。一次,老师出的题目是:1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png)老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!
注意:答案是个整数(考虑对称性,肯定是偶数)。请通过浏览器提交。不要书写多余的内容。
蚂蚁感冒
长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
【数据格式】
第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
接着的一行是n个用空格分开的整数 Xi (-100 < Xi < 100), Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现0值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。
要求输出1个整数,表示最后感冒蚂蚁的数目。
例如,输入:
3
5 -2 8
程序应输出:
1
再例如,输入:
5
-10 8 -20 12 25
程序应输出:
3
题解:该题目也可以说是一个找规律的,是一道思维题,该规律即是:所有与感冒的蚂蚁相对的蚂蚁都将被感染。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef struct
{
int s;
int abs;
}node;
node a[50];
int counter=0;
int main()
{
int n,i=0;
node temp;
node tt;
cin>>n;
getchar();
while(n)
{
cin>>a[i].s;
if(i==0)
{
tt.s=a[i].s;
}
if(a[i].s<0)
{
a[i].s=-a[i].s;
a[i].abs=-1;
}
else
{
a[i].abs=1;
}
i++;
n--;
}
//排序算法
for(int j=0;j<i-1;j++)
{
int m=j;
for(int k=j+1;k<i;k++)
if(a[m].s>a[k].s)
m=k;
if(m!=j)
{
temp.s=a[m].s;temp.abs=a[m].abs;
a[m].s=a[j].s;a[m].abs=a[j].abs;
a[j].s=temp.s;a[j].abs=temp.abs;
}
}
if(tt.s<0)
tt.s=-tt.s;
int m;
for(int j=0;j<i;j++)
{
if(a[j].s==tt.s)
{
m=j;
break;
}
}
int z;
if(a[m].abs==-1)
z=-1;
if(z==-1)
{
for(int j=0;j<m;j++)
{
if(a[j].abs==1)
counter++;
}
if(counter!=0)
{
for(int j=m+1;j<i;j++)
{
if(a[j].abs==-1)
counter++;
}
}
}
if(z==1)
{
for(int j=m+1;j<i;j++)
{
if(a[j].abs==-1)
counter++;
}
if(counter!=0)
{
for(int j=0;j<m;j++)
{
if(a[j].abs==1)
counter++;
}
}
}
cout<<counter+1;
return 0;
}