注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字
497
#include
#include
using namespace std;
int main()
{
char a[]="1011100010011001011111011100010110010001100110011000100101100010100101101000101011101000011010010001100100011011000100010011111010000110010110110101100101110101111010111010111101010001000111110000000011101110101100101100100101010011101101111110100101100101110000001011111000100111001001011101001010001001000100011010101100001111100111011010101011110101101000100000111010001110001101111101000001000011010010100010111001001100101111111001101111000100001000000101100000001100011011010101011110001100000011010100101101110000000110110011111000100010011110101011011010010111011000110111111111011001000100000010100010000000010100010010101100111100010011101110100111011101100010101000111111001010000100111111011110101000011000100110111000101110011110010100010110001110011100001010000001110110000100100001000100000001111001000111010010001101101110110110100000000000011101111010100111111100001101011000011111011110010011111010010110011001011110001111101111100010010101101111011011011111101000111011000010111001";
int i,cnt=0;
for (i=0; a[i]; i++)
{
if (a[i] == '1')
cnt++;
}
cout<
}
地产大亨Q先生临终的遗愿是:拿出100万元给X社区的居民抽奖,以稍慰藉心中愧疚。
麻烦的是,他有个很奇怪的要求:
1. 100万元必须被正好分成若干份(不能剩余)。每份必须是7的若干次方元。
比如:1元, 7元,49元,343元,...
2. 相同金额的份数不能超过5份。
3. 在满足上述要求的情况下,分成的份数越多越好!
请你帮忙计算一下,最多可以分为多少份?
注意:只需要填写一个整数,就是分成的份数,不要填写任何多余的内容。比如说明文字。
-----------------------------
剧透中.......
笨笨有话说:
7的次方能有多少啊?不超过100万的一共就那么几个,每个的取值从0到5,
组合起来也没有多少啊,看看哪个组合刚好凑成100万不就行了。
如果嫌找出最多的那个组合费事,把所有凑成100万的输出不就行了?我就不信,
能凑成100万的情况会有那么多吗?应该屈指可数吧!
歪歪有话说:
如果要求是10的次幂的话,1,10,100,1000,.... 会怎么样?很容易算哦。
那么,10是个特殊的数字吗?难道不是因为我们人类有10个手指吗?
如果我们的手指是7根.......7进制你听说过吗?
算出来是16份,结果如下图,不知道是不是最大的份数,如果不是请在最下方评论正确答案,感谢!!
#include
#include
using namespace std;
int a[8]={823543,117649,16807,2401,343,49,7,1};
int v[8]={0},MAX=0,flag=0;
void dfs(int s)
{
int i,sum=0,ss=0;
if (flag)
return;
if (s>1000000)
{
return ;
}
if (s == 1000000)
{
for (i=0; i<8; i++)
{
sum+=v[i];
}
if(MAX < sum)
{
for (i=0; i<8; i++)
{
cout<
题目:猜算式
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如出现因字体而产生的对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
------------------------------------------------------------
剧透中......
笨笨有话说:
把所有可能的3位数乘以3位数搜索一遍的话....
关键是,这20个数字中0~9都用了两次,需要统计每个数字出现的次数...
看起来有点麻烦啊!
歪歪有话说:
我敢打赌!如果有某个数字出现次数不足2次,就一定有某个数字出现多于2次!
这样,在累积出现次数的时候,只要看到某数已经出现3次了,就果断否定之!
#include
#include
#include
using namespace std;
int i,j;
int check()
{
int a,b,c,k,s;
int v[20]={0};
v[i%10]++;
v[i/10%10]++;
v[i/100]++;
v[j%10]++;
v[j/10%10]++;
v[j/100]++;
for (k=0; k<20; k++)
{
if (v[k] > 2)
return 0;
}
a = i*(j%10);
b = i*(j/10%10);
c = i*(j/100);
if (a/1000>0||b/1000>0||c/1000>0)
return 0;
v[a%10]++;
v[a/10%10]++;
v[a/100]++;
v[b%10]++;
v[b/10%10]++;
v[b/100]++;
v[c%10]++;
v[c/10%10]++;
v[c/100]++;
s = i*j;
v[s%10]++;
v[s/10%10]++;
v[s/100%10]++;
v[s/1000%10]++;
v[s/10000%10]++;
for (k=0; k<20; k++)
{
if (v[k] > 2)
return 0;
}
return 1;
}
int main()
{
for (i=100; i<=999; i++)
{
for (j=100; j<=999; j++)
{
if (check())
{
cout<
标题:数字段计数
在一个给定的字符串中,既包含数字也包含字母。
我们不关心具体的数字、字母都是什么。
我们只是想知道,被字母隔开的数字区域一共有多少个?
换句话说,把连续的数字看成一个数字段(单个的数字也算一段),那么这样的“段”有多少呢?
比如:"YYY5532XX6X78" 就包含3个数字段。
而,"45TTT7799M" 包含两个数字段。
下面的程序解决了这个问题。
其思路是:每发现一个由字母到数字的“跳变”就计数。
请仔细阅读源码,提交划线的位置缺少的代码。
注意:
只提交划线部分缺少的代码,不要包含已经存在的代码或符号。
也不要画蛇添足地写出任何注释或说明性文字。
注意选择你所使用的语言。
java代码:
String s = "7AAA1234BBB5555KIKI8888FF1319621d....kkk9kk";
boolean old_tag = false; // 表示开始不是数字
boolean tag = false;
int n = 0; // 数字组计数
for(int i=0; i
tag = c>='0' && c<='9'; // 是否为数字
if(___________________) n++; //填空位置
old_tag = tag;
}
System.out.println(n);
c/c++代码:
char s[] = "7AAA1234BBB5555KIKI8888FF1319621d....kkk9kk";
int old_tag = 0; // 表示开始不是数字
int tag = 0;
int n = 0; // 数字组计数
int i;
for(i=0; s[i]; i++){
char c = s[i];
tag = c>='0' && c<='9'; // 是否为数字
if(____________________) n++; //填空位置
old_tag = tag;
}
printf("%d\n", n);
//这样写不对,对于数字在末尾的就无法计数了,感谢评论区5楼的指正,谢谢
!tag&&old_tag
//应该这样,当前的是数字且上一个不是数字
tag && !old_tag
标题:报数游戏
有 n (1
游戏开始! 从1号小朋友起,顺时针报数,从1报起。
即:1号小朋友报1,2号小朋友报2,3号小朋友报3, ....
游戏规定,报到数字 m(1
游戏这样一直进行下去,直到圈中只剩下一个小朋友。
求最后剩下的小朋友的编号。
输入:两个整数,n 和 m, 用空格分开。含义如上。
输出:一个整数,表示最后剩下的小朋友的编号。
比如:
输入:
15 3
程序应该输出:
5
再比如:
输入:
7 4
程序应该输出:
2
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
java选手注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
java选手注意:主类的名字必须是:Main,否则按无效代码处理。
c/c++选手注意: main函数需要返回0
c/c++选手注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
c/c++选手注意: 所有依赖的函数必须明确地在源文件中 #include
提交程序时,注意选择所期望的语言类型和编译器类型。
--------------------------------------
ps.
剧透中.....
笨笨有话说:
如果用一个数组来表示小朋友,用一个变量来记着当前的小朋友....
麻烦的是如何表示小朋友已经“离席”.....要不把他(她)的位置填为特殊值。
当前位置需要不断移动,移动到数组边沿需要折回来,好麻烦啊...
歪歪有话说:
自己做个循环小链表挺好的,正好和实际情况一模一样。怎么判断只剩一个孩子呢?
自己的下一个还是自己!
#include
#include
using namespace std;
int main()
{
int n, m,i,s=0;
scanf("%d %d",&n,&m);
if (n==0 && m==0)
break;
s = 0;
for(i=2;i<=n;i++)
{
s=(s+m)%i;
}
cout< return 0;
}
#include
#include
#include
using namespace std;
char my[100],pw[100],str[25],s[5][5],ch,passwd[100];
int k=0,v[30]={0};
int f1(char x,char y)
{
int i,j,a,b,c,d;
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{
if (x == s[i][j])
{
a = i;
b = j;
}
if (y == s[i][j])
{
c=i;
d=j;
}
}
if (a==c || b==d)
{
return 1;
}
return 0;
}
int f(char x, char y) //两个有一个不在
{
int i,j,flag=0;
for (i=0; i<5; i++)
for (j=0; j<5; j++)
{
if (x==s[i][j] || y == s[i][j])
{
flag++;
}
}
if (flag == 1)
{
return 1;
}
return 0;
}
void f2(char x,char y)//找对角
{
int i,j,a,b,c,d;
for (i=0; i<5; i++)
{
for (j=0; j<5; j++)
{
if (s[i][j] == x)
{
a = i;
b = j;
}
if (s[i][j] == y)
{
c = i;
d = j;
}
}
}
passwd[k++] = s[a][d];
passwd[k++] = s[c][b];
}
int main()
{
int i,j;
scanf("%s%s",my,pw);
for (i=0; my[i]; i++)
{
v[my[i]-'a']++;
if (v[my[i]-'a'] > 1)
{
continue;
}
str[k++] = my[i];
}
ch = k/5+'a'; //ch为接着的起始字母
for (i=k; i<25;)
{
v[ch-'a']++;
if (v[ch-'a'] > 1)
{
ch++;
continue;
}
str[i] = ch++;
i++;
}
k=0;
for (i=0; i<5 ;i++)//放入5*5数组中
for (j=0; j<5; j++)
{
s[i][j] = str[k++];
}
k=0;
for (i=0; pw[i];)
{
if (pw[i+1]!='\0')
{
if (pw[i] == pw[i+1] || f(pw[i],pw[i+1])) //相等 ,或者有一个不再矩阵中
{
passwd[k++] = pw[i];
passwd[k++] = pw[i+1];
i+=2;
continue;
}
if (f1(pw[i],pw[i+1])) //同行或同列,调换两者
{
passwd[k++] = pw[i+1];
passwd[k++] = pw[i];
i+=2;
continue;
}
f2(pw[i],pw[i+1]); //找对角的
i+=2;
}
else if (pw[i+1] == '\0')
{
passwd[k++] = pw[i];
break;
}
}
passwd[k] = '\0';
puts(passwd);
return 0;
}
#include
using namespace std;
int no[10][10]={0},v[10]={0},cnt=0,a[10]={0};
int n,f[9][2]={0};
int check(int x)
{
int i,j;
for (i=1; i<=n; i++) //检测
{
for (j=2; j<=x; j++)
{
if ((a[j]==f[i][0] && a[j-1]==f[i][1]) || (a[j]==f[i][1]&&a[j-1]==f[i][0]))
break;
}
if (j>x)
return 0;
}
return 1;
}
void dfs(int x)
{
int i;
if (x>4)
{
if (check(x-1))
{
cnt++;
}
}
for (i=1; i<=9; i++)
{
if (!v[i])
{
if (x>1)
{
if (no[i][a[x-1]] //如果当前选的点(i)和上一个选的点(a[x-1])是跨点的,比如1和9跨5,1和3跨2
&& !v[no[i][a[x-1]]]) //那么两个点中间的点是必须被走过的,假如没走过就是非法的
continue;
}
a[x] = i;
v[i] = 1;
dfs(x+1);
v[i] = 0;
}
}
}
int main()
{
int i,j;
no[1][3] = no[3][1] = 2;
no[1][9] = no[9][1] = 5;
no[1][7] = no[7][1] = 4;
no[2][8] = no[8][2] = 5;
no[3][7] = no[7][3] = 5;
no[4][6] = no[6][4] = 5;
no[7][9] = no[9][7] = 8;
no[3][9] = no[9][3] = 6;
cin>>n;
if (n == 0)
{
cout<<389112;
return 0;
}
for (i=1; i<=n; i++)
{
cin>>f[i][0]>>f[i][1];
}
dfs(1);
cout<