zzuli:小G的日常之開關燈
阿新 • • 發佈:2018-11-26
http://acm.zzuli.edu.cn/problem.php?id=2391
題目描述
在小G面前有一排燈,有的燈是亮的有的燈是滅的,假如小G按了一個燈的開關,那麼這個燈和它後面的都會變成相反的狀態,既滅的亮,亮的滅.
現在小G想把所有的燈開啟,請問最少需要按多少個開關?
輸入
第一行輸入一個數n(n<=1000),表示有n盞燈
第二行輸入n個數,表示n盞燈的當前狀態,0表示燈滅,1表示燈亮
輸出
最少的運算元是多少。
樣例輸入
5 0 0 0 0 0
樣例輸出
1
因為每個關著的燈都必須操作一次,所以只要從前到後模擬一遍就行了。
#include<stdio.h>
#define N 1020
int a[N];
int main()
{
int n,i,j,ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
if(a[i]==0)
{
ans++;
for(j=i;j<=n;j++)
a[j]=!a[j];
}
}
printf("%d\n",ans);
return 0;
}
還可以簡化成一次迴圈,記錄開燈的次數,後面的燈當開燈次數為偶數的時候不用改變,如果為奇數,狀態改變。
#include<stdio.h>
#define N 1020
int a[N];
int main()
{
int n,i,j,ans=0,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
if((s%2))
a[i]=!a[i];
if(a[i]==0)
{
ans++;
s++;
}
}
printf("%d\n",ans);
return 0;
}