1. 求杭电ACM1015代码

#include <stdio.h>
#include <math.h>

void sort(int array[], int size); //将输入的字母序列按由大到小排列
void finder(int a[], int size, int key); //寻找满足条件的五个字母

int main(void)
{
long long target; //因为target可以很大,所以用long long
char a[12]; //存储输入的字母序列
int b[12]; //存储字母序列相应的整数序列
int num, i; //num计输入的字母个数,i为循环变量

while(EOF != scanf("%ld", &target))
{
scanf("%s", a);
num = strlen(a);
if(num < 5 || num > 12) //题意要求字母个数在5~12个之间
break;
//如果输入“0 END”则结束
if(0 == target && 'E' == a[0] && 'N' == a[1] && 'D' == a[2])
break;
//将字母序列转换成相应的数字序列
for(i=0; i<num; i++)
{
b[i] = a[i] -64;
}
sort(b, num);
finder(b, num, target);
}
return 0;
}

void sort(int array[], int size)
{
int i, j, temp;

//冒泡排序,结果按从大到小排列
for(i=0; i<size-1; i++)
{
for(j=0; j<size-1; j++)
if(array[j] < array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}

void finder(int a[], int size, int key)
{
int v, w, x, y, z, N;
int flag = 0; //没有找到满足条件的字母,则flag=0,找到则为1。

//这个算法比较笨,但今天脑袋不太行,呵呵,只能这样先,能AC的!以后再来优化
for(v=0; v<size; v++)
{
for(w=0; w<size; w++)
{
for(x=0; x<size; x++)
{
for(y=0; y<size; y++)
{
for(z=0; z<size; z++)
{
N = pow(a[v], 1) - pow(a[w], 2) + pow(a[x], 3)
- pow(a[y], 4) + pow(a[z], 5);
if(key == N
&& z != v && z != w && z != x && z != y
&& y != v && y != w && y != x
&& x != v && x != w
&& w != v
)
{
v = a[v] + 64; w = a[w] + 64; x = a[x] + 64;
y = a[y] + 64; z = a[z] + 64;
printf("%c%c%c%c%c\n", v, w, x, y, z);
flag = 1;
return;
}
}
}
}
}
}
if(0 == flag)
{
printf("no solution\n");
}
}

上面的代码是我花了三个小时光景才写出来的,已经AC了。我目前的这个算法比较笨,就是从头到尾的尝试一遍。当然在找之前先将字母序列从大到小排序,这样从靠后的字母开始找,找则就输出结果,并等待下一次的输入。这样会比较节省时间。
我的这个算法改进之处蛮大,现在暂时没脑袋想了,呵呵,哪天有好的想法再来改,你有好的想法我上我空间跟我说一声哦,谢谢拉!
晚上我会整理一下写一个日志,你到时可以看一看,呵呵,一起进步呀!

2. 杭电2004代码

c语言没有连着的不等号。

所以:

if(90<=t<=100)

就要改成:

if(90<=t&&t<=100)

其中"&&"表示且的意思。


我猜你已经知道啦...哈哈[我是来骗点赞的(QAQ雾)]

3. 求杭电acm 1247的代码 要C语言的

Your output should contain all the hat’s words, one per line, in alphabetical order.
输出要按字母序

4. 杭电acm2058求解释下代码

首先,我觉得这段代码有问题,虽然我在杭电的oj上测试通过了。

为什么说有问题?举一个反例

输入2 6

输出[1,3]

很容易看出这个输出是错误的。


然后,我把代码改了一下,然后去杭电的oj上测试也通过了。

#include<stdio.h>
#include<math.h>

intmain(){
intn,m;
intl,i,a,b,s;
while(scanf("%d%d",&n,&m),n+m)
{
l=(int)sqrt(2*m);
for(i=l;i>=1;i--)
{
s=(2*m+i-i*i)/2;
if(s%i==0)
{
a=s/i;
if(a+i-1>n)break;
printf("[%d,%d] ",a,a+i-1);
}
}
printf(" ");
}
return0;
}

最后,说一下我对代码的解释

假设:1,2,3,...,n中的i个数(a1,a2,...,ai)满足sum(a1,a2,...,ai)=m。

那么,1<=a1<=m,

当a1=1时,i=ai,i取得最大值,由于i*(1+i)/2=m,i=sqrt(2*m-i)<sqrt(2*m);

当a1=m时,i=1,i取得最小值。

所以,1<=i<=sqrt(2*m)。

同时我们知道,两个长度都为i却不相同的连续数列,它们的和不可能都等于m。

从上面的讨论可知,满足要求的数列的长度i在[1,sqrt(2*m)]之间,且不重复。


现在从sum(a1,a2,...,ai)=m反推,由于ai=a1+i-1,可知:

sum(a1,a2,...,ai) = (a1+ai)*i/2 = (a1+a1+i-1)*i/2= m

a1*i = (2*m+i-i*i)/2 = s

那么,存在1,2,3,...,n中的i个数(a1,a2,...,ai)满足sum(a1,a2,...,ai)=m,

等价于,对于s=(2*m+i-i*i)/2有:s%i=0(因为a1=s/i),且s/i+i-1<=n(因为ai=s/i+i-1)

5. 杭电1002C++代码

#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
char a[1005],b[1005];
int c[1010];
int i,j,k,flag,flag1;
cin>>n;
getchar();
for(int cnt=1;cnt<=n;cnt++)
{
cin>>a>>b;
flag=0;flag1=0;
if(strlen(a)<strlen(b))
{
char temp[1005];
strcpy(temp,a);
strcpy(a,b);
strcpy(b,temp);
flag=1;
}
memset(c,0,sizeof(c));k=0;
for(i=strlen(a)-1,j=strlen(b)-1;j>=0;i--,j--)
{
c[k]+=a[i]-'0'+b[j]-'0';
if(c[k]>=10)
{c[k+1]+=c[k]/10;c[k]%=10;k++;}
else k++;
}
for(i=strlen(a)-strlen(b)-1;i>=0;i--)
{
c[k]+=a[i]-'0';
if(c[k]>=10)
{c[k+1]+=c[k]/10;c[k]%=10;k++;}
else k++;
}
cout<<"Case "<<cnt<<':'<<endl;
if(flag==0)cout<<a<<" + "<<b<<" = ";
else cout<<b<<" + "<<a<<" = ";
while(c[k]==0)k--;
for(i=k;i>=0;i--)
{ cout<<c[i];flag1=1;}
if(flag1==0)cout<<"0";
cout<<endl;
if(cnt<n)cout<<endl;
}
return 0;
}

6. 杭电1001我的代码是

#include <iostream>
using namespace std;
int main()
{
int a,j; int sum; // sum should be int
while(cin>>a!=NULL)
{
sum=0;
for(j=1;j<=a;j++)
{
sum+=j;
}
cout<<sum<<endl<<endl;
}
return 0;
}

7. 杭电2562 我的代码哪错啦

首先有个错就是return 0是不需要的,因为你的主函数是void型的,不需要返回值。然后就是你的函数功能是什么啊??都不知道你的函数要干嘛,所以不知道你的程序哪里错了,因为把那个return去掉以后程序是能运行的,就是不知道是不是你想要的效果。

8. 杭州电子科技大学的学校代码

院校代码 0062
专业代号 专业名称
71 会计学
72 国际经济与贸易
73 工商管理
74 英语
75 社会学
76 编辑出版学
77 法学
78 传播学(新媒体传播)
* 预留高分征求志愿计划
01 机械设计制造及其自动化
03 车辆工程
07 自动化
09 电气工程与自动化
11 电子信息技术及仪器
13 会计学
15 国际经济与贸易
20 信息管理与信息系统
22 工商管理
24 电子信息工程
26 计算机科学与技术
28 网络工程
30 数字媒体技术
31 通信工程
33 信息对抗技术
34 信息安全
35 信息工程
36 信息与计算科学
38 数学与应用数学
40 光信息科学与技术
42 英语
50 软件工程
61 集成电路设计与集成系统等
04 工业设计
05 环境科学
06 环境工程
10 电气信息工程
12 生物医学工程
16 统计学
18 金融学
19 经济学
23 工业工程(中德联合培养)
41 应用物理学
44 编辑出版学
45 法学
46 包装工程(包装系统设计)
48 印刷工程(数字图文信息)
49 传播学(新媒体传播)
62 光电信息工程
92 包装工程(包装艺术设计)
91 包装工程(包装艺术设计)

9. 杭电acm怎么查看自己ac过的代码

点击右上角自己的用户名,点击自己解决问题的问题编号,再在出来的accepted的长条框里点代码的大小

10. 小弟是初学者,杭电1004题代码不太懂求详细解释

#include<stdio.h>
#include<string.h>
int main()
{
int n,i,t,max,j,b[1000];
char a[1000][16];
while(scanf("%d",&n)!=EOF&&n) // 读取气球数目
{
getchar();
max=0;
for(i=0;i<n;i++)
{
gets(a[i]); // 读取气球名字
b[i]=1; // 设定气球数目为1
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(strcmp(a[i],a[j])==0) // 如果第i个气球和第j个气球有相同名字, 则第i个气球的数目+1
b[i]++;
}
}
for(i=0;i<n;i++) // 找出n个气球中数目最大的那个
{
if(max<b[i])
{
max=b[i];
t=i; // 记录那个气球的编号
}
}
printf("%s\n",a[t]); // 输出那个气球的名字
}

}