社区讨论

求助,为什么#7输出结果都一样但就是过不了?

P1098[NOIP 2007 提高组] 字符串的展开参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi7ygcex
此快照首次捕获于
2025/11/21 05:40
4 个月前
此快照最后确认于
2025/11/21 05:40
4 个月前
查看原帖

其他测试点都过了,唯独#7怎么也过不了

#7输入数据:
CPP
2 8 2
--09-8-w-er-7h-08w-e7-hc-r890-q7w-eh-rc98-07-q8-ewr-8h-c-8-294-5-dsf--k-h-2-48-3k-h-sd-fq-a-
输出数据:
CPP
--09-8-w-er-7h-08w-e7-hcQQQQQQQQPPPPPPPPOOOOOOOONNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKJJJJJJJJIIIIIIIIHHHHHHHHGGGGGGGGFFFFFFFFEEEEEEEEDDDDDDDDr890-q7w-ehQQQQQQQQPPPPPPPPOOOOOOOONNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKJJJJJJJJIIIIIIIIrc98-07-q8-ewr-8h-c-8-2945-dsf--k-h-23333333348-3k-hRRRRRRRRQQQQQQQQPPPPPPPPOOOOOOOONNNNNNNNMMMMMMMMLLLLLLLLKKKKKKKKJJJJJJJJIIIIIIIIsdEEEEEEEEfq-a-
我的代码(有点长,请见谅):
CPP
#include<iostream>
#include<string.h>
using namespace std;
int p1,p2,p3;
void calculate(char a[])
{
	cout<<a[0];
	for(int i=1;a[i]!='\0';i++)
	{
		if(a[i]=='-')
		{
			if(a[i-1]>=a[i+1]) 
			{
				cout<<a[i]<<a[i+1];
				i++;
				continue;
			}
			if(a[i-1]+1==a[i+1])
			{
				cout<<a[i+1];
				i++;
				continue;
			}
			if(a[i-1]<a[i+1]&&((a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9')||(a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z')))
			{
				switch(p1)
				{
					case 1:
					{
						switch (p3)
						{
							case 1:
							{
								for(int k=a[i-1]+1;k<a[i+1];k++)
								{
									char K=(char)k;
									for(int j=0;j<p2;j++)
									{
										cout<<K;
									}
								}
								break;
							}
							case 2:
							{
								for(int k=a[i+1]-1;k>a[i-1];k--)
								{
									char K=(char)k;
									for(int j=0;j<p2;j++)
									{
										cout<<K;
									}
								}
								break;
							}
						}
						break;
					}
					case 2:
					{
						switch (p3)
						{
							case 1:
							{
								if(a[i-1]>='a')
								{
									for(int k=a[i-1]+1;k<a[i+1];k++)
									{
										char K=(char)k-32;
										for(int j=0;j<p2;j++)
										{
											cout<<K;
										}
									}
								}
								else
								{
									for(int k=a[i-1]+1;k<a[i+1];k++)
									{
										char K=(char)k;
										for(int j=0;j<p2;j++)
										{
											cout<<K;
										}
									}
								}
								break;
							}
							case 2:
							{
								if(a[i-1]>='a')
								{
									for(int k=a[i+1]-1;k>a[i-1];k--)
									{
										char K=(char)k-32;
										for(int j=0;j<p2;j++)
										{
											cout<<K;
										}
									}
								}
								else
								{
									for(int k=a[i+1]-1;k>a[i-1];k--)
									{
										char K=(char)k;
										for(int j=0;j<p2;j++)
										{
											cout<<K;
										}
									}
								}		
								break;
							}
						}
						break;
					}
					case 3:
					{
						for(int k=a[i-1]+1;k<a[i+1];k++)
						{
							for(int j=0;j<p2;j++)
							{
								cout<<'*';
							}
						}
						break;
					}
				}
			}
			else cout<<a[i];
		}
		else cout<<a[i];
	}
}
int main()
{
	cin>>p1>>p2>>p3;
	char a[101];
	cin>>a;
	calculate(a);
	return 0;
}

求大佬指点qwq

回复

3 条回复,欢迎继续交流。

正在加载回复...